有关#if定义的问题(宏名称)

时间:2018-10-14 09:41:39

标签: c macros c-preprocessor

#if defined(_WIN32)
#if !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS 
#endif

因此,以上是某些项目文件中的C语言代码的前4行。

我确实知道#if定义(宏名)的意思是,如果定义了宏,则表达式的值为1,否则为0。

因此,基本上,前两行将为1或0,但是它们会做什么?只是一个人坐1还是0?

3 个答案:

答案 0 :(得分:3)

defined()评估为01,然后从该值if决定是否应该进入身体。就像普通的if语句。

答案 1 :(得分:1)

  

因此,基本上,前两行将为1或0,但是它们会做什么?只是一个人坐1还是0?

不,#if将保留,仅defined()将变为01

因此,假设已定义了_WIN32_CRT_SECURE_NO_WARNINGS,则显示的第一行第一行如下所示:

#if 1
#if 0

这两个if语句控制是否考虑以下内容,直到 next #endif语句为止。

以上代码段虽然不完整,但应如下所示:

#if 1
#if 0
#define FOO 42
#endif
#endif

以上内容不会#define FOO

以下内容也不会#define FOO

#if 0
#if 1
#define FOO 42
#endif
#endif

以下定义FOO

#if 1
#if 1
#define FOO 42
#endif
#endif

返回您的示例代码:

由外部if语句“控制”的东西

#if defined(_WIN32)

#if !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS 

由内部if语句“控制”的东西

#if !defined(_CRT_SECURE_NO_WARNINGS)

#define _CRT_SECURE_NO_WARNINGS 

答案 2 :(得分:1)

  

因此,基本上,前两行将为1或0,但是它们会做什么?只是一个人坐1还是0?

# Check if the proxy is set
npm config get proxy

不会将行替换为#if expression 的结果,但是预处理程序将决定{p>中的expression的值

expressen

是否将处理#if expression controlled text #endif /* expression */