猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
#if中使用的未定义常量的值是什么?
为了评估
#if
条件,我的预处理器似乎假定未定义的常量为0 。
可以依靠它吗,或者未定义的常量会产生未定义的行为?
跃然一笑
浏览 771
回答 3
3回答
暮色呼如
是的,可以依靠它。C99标准在§6.10.1¶3中进行了规定:由于宏扩展和已定义的一元运算符而执行所有替换后,所有剩余的标识符都将替换为pp-number 0编辑抱歉,我认为这是一个C问题。没什么大不了的,C ++标准(第16.1节¶4)中的等效部分指出:由于宏扩展和已定义的一元运算符而执行了所有替换后,除true和之外的所有其余标识符和关键字false将替换为pp-number0唯一的区别是不同处理的true和false,其中用C不需特殊处理,而在C ++中,他们有一个特殊的意义,即使在预处理阶段。
0
0
0
HUWWW
0在对表达式求值之前,会将未定义为宏的标识符转换为。标识符true是例外,它将转换为1。这是特定于C ++预处理程序的;在C语言中,这不会发生,您需要包括<stdbool.h>使用true这种方式,在这种情况下,它将被定义为宏,并且不需要任何特殊处理。
0
0
0
ABOUTYOU
只是好奇:编译器为什么要这么做?为什么在表达式未定义并且编译器仍然知道这一点时,编译器为什么不能抛出错误消息?这不会导致软件中不必要的错误吗?我真的很困惑,为什么较新的编译器不注意这一点。仅仅是因为必须保持向后兼容性吗?
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
C++
typedef入门问题
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续