Jea*_*dar 3 c c-preprocessor preprocessor-directive
这些指令之间的区别是什么?
#ifdef FOO
#if defined FOO
#if defined(FOO)
Run Code Online (Sandbox Code Playgroud)
我正在使用CCS编译器,但我也对其他C编译器感兴趣.
从我所看到的,主要用途#if defined是在一行上检查多个宏定义.否则,对于单宏定义条件,据我所知它们是相同的.
#include <stdio.h>
int main()
{
#if defined(FOO) && defined(BAR)
printf("foobar!\n");
#else
printf("nothing.\n");
#endif
return 0;
}
Run Code Online (Sandbox Code Playgroud)
$ tcc -DFOO -run a.c nothing. $ tcc -DBAR -run a.c nothing. $ tcc -DFOO -DBAR -run a.c foobar!
此外,上面的程序编译得很好,gcc -Wall -ansi a.c因此建议#if defined是正确的ANSI C.此外,1987年的ANSI C摘要列出#if defined了ANSI标准下预处理器的新定义行为 - 这应该是您将使用的任何ANSI兼容编译器的标准.
如果你没有使用#if defined,你必须这样做
#ifdef FOO
#ifdef BAR
printf("foobar!\n");
#endif /* BAR */
#endif /* FOO */
Run Code Online (Sandbox Code Playgroud)
此外,C预处理器的Redhat手册说
#if defined MACRO恰恰相当于#ifdef MACRO.