亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

#if中使用的未定義常量的值是什么?

#if中使用的未定義常量的值是什么?

C++
躍然一笑 2019-12-04 10:20:42
為了評估#if條件,我的預處理器似乎假定未定義的常量為0 ??梢砸揽克鼏幔蛘呶炊x的常量會產生未定義的行為?
查看完整描述

3 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

是的,可以依靠它。C99標準在§6.10.1?3中進行了規定:


由于宏擴展和已定義的一元運算符而執行所有替換后,所有剩余的標識符都將替換為pp-number 0


編輯


抱歉,我認為這是一個C問題。沒什么大不了的,C ++標準(第16.1節?4)中的等效部分指出:


由于宏擴展和已定義的一元運算符而執行了所有替換后,除true和之外的所有其余標識符和關鍵字false將替換為pp-number0


唯一的區別是不同處理的true和false,其中用C不需特殊處理,而在C ++中,他們有一個特殊的意義,即使在預處理階段。


查看完整回答
反對 回復 2019-12-04
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

0在對表達式求值之前,會將未定義為宏的標識符轉換為。

標識符true是例外,它將轉換為1。這是特定于C ++預處理程序的;在C語言中,這不會發生,您需要包括<stdbool.h>使用true這種方式,在這種情況下,它將被定義為宏,并且不需要任何特殊處理。


查看完整回答
反對 回復 2019-12-04
?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

只是好奇:編譯器為什么要這么做?為什么在表達式未定義并且編譯器仍然知道這一點時,編譯器為什么不能拋出錯誤消息?這不會導致軟件中不必要的錯誤嗎?我真的很困惑,為什么較新的編譯器不注意這一點。僅僅是因為必須保持向后兼容性嗎?

查看完整回答
反對 回復 2019-12-04
  • 3 回答
  • 0 關注
  • 879 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號