#ifdef和#ifndef的作用
#define one 0 #ifdef one printf("one is defined "); #ifndef one printf("one is not defined ");
在这里, #ifdef
和#ifndef
的作用是什么,输出是什么?
ifdef/endif
或ifndef/endif
对中的文本将由预处理器保留或删除,具体取决于条件。 ifdef
意思是“如果定义如下”,而ifndef
意思是“如果下面没有定义”。
所以:
#define one 0 #ifdef one printf("one is defined "); #endif #ifndef one printf("one is not defined "); #endif
相当于:
printf("one is defined ");
因为定义了一个ifdef
是真的, ifndef
是假的。 不pipe它被定义为什么。 类似(更好的是我的观点)这段代码将是:
#define one 0 #ifdef one printf("one is defined "); #else printf("one is not defined "); #endif
因为这在这个特定的情况下更明确地expression了意图。
在你的具体情况下, ifdef
之后的文本不会被删除,因为定义了one
。 由于相同的原因, ifndef
之后的文本被删除。 在某一点需要有两条closures的endif
行,第一行将导致行再次被包含,如下所示:
#define one 0 +--- #ifdef one | printf("one is defined "); // Everything in here is included. | +- #ifndef one | | printf("one is not defined "); // Everything in here is excluded. | | : | +- #endif | : // Everything in here is included again. +--- #endif
有人应该提到,在这个问题上有一个小陷阱。 #ifdef
只会检查是否通过#define
或命令行定义了下面的符号,但是它的值(实际上它的replace)是不相关的。 你甚至可以写
#define one
预编译器接受这一点。 但是,如果你使用#if
这是另一回事。
#define one 0 #if one printf("one evaluates to a truth "); #endif #if !one printf("one does not evaluate to truth "); #endif
会给one does not evaluate to truth
。 defined
的关键字允许获得所需的行为。
#if defined(one)
因此相当于#ifdef
#if
构造的优点是允许更好地处理代码path,尝试使用旧的#ifdef
/ #ifndef
对来做类似的事情。
#if defined(ORA_PROC) || defined(__GNUC) && __GNUC_VERSION > 300
“#if one”表示如果“#define one”被写入“#if one”,否则执行“#ifndef one”。
这只是C语言中if,then,else分支语句的C预处理器(CPP)指令。
即如果{#define one}然后printf(“一个评估真相”); 其他printf(“一个没有定义”); 所以如果没有#define one语句,那么语句的else分支将被执行。