对于定义为0的宏,#ifdef和#if之间的细微差别
给出下面的C文件:
$cat macros.c #ifdef MACRO # error MACRO is defined #else # error MACRO is undefined #endif #if MACRO # error MACRO is non-zero #else # error MACRO is zero #endif 以下的预期产量是多少? $gcc -c macros.c $gcc -DMACRO -c macros.c $gcc -DMACRO=0 -c macros.c 答:这是我机器上gcc的预处理器. $gcc -c macros.c macros.c:4:4: error: #error MACRO is undefined macros.c:9:4: error: #error MACRO is zero $gcc -DMACRO -c macros.c macros.c:2:4: error: #error MACRO is defined macros.c:7:4: error: #error MACRO is non-zero $gcc -DMACRO=0 -c macros.c macros.c:2:4: error: #error MACRO is defined macros.c:9:4: error: #error MACRO is zero $ 课程:#ifdef即使定义的值为0(零),MACRO也会对定义的内容求值为true. 另一个C预处理器了!这是按照C标准应该如何吗? 解决方法
为了评估#if语句的控制表达式,任何未定义的宏都被视为0.从C99§6.10.1/ 3-4(重点补充):
所以,例如,像这样的表达式: #if !FOO 如果FOO未定义,将评估为1,因为它将被视为0,然后!FOO将被评估为!0,即1. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |