为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
跃然一笑 2019-12-04 10:20:42
为了评估#if条件,我的预处理器似乎假定未定义的常量为0 。可以依靠它吗,或者未定义的常量会产生未定义的行为?
查看完整描述

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 关注
  • 766 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信