让我们假设我们在C程序中有下一段代码:
#ifdef USE_FORK
CODE...
#else
phtread_t thread;
pthread_create(&thread,NULL,clientDispatch,&client);
#endif
你能解释一下这些指令是什么,ifdef,else,endif。当我们使用C指令时会发生什么?
答案 0 :(得分:2)
预处理程序指令是程序代码中包含的行,后面是井号(#)。这些行不是程序语句,而是预处理程序的指令。预处理器在实际编译代码之前检查代码,并在通过常规语句实际生成任何代码之前解析所有这些指令。
#ifdef
仅在已定义指定为参数的宏时才允许编译程序的一部分,无论其值是多少。例如:
#ifdef TABLE_SIZE
int table[TABLE_SIZE];
#endif
在这种情况下,代码行int table[TABLE_SIZE];
仅在>> TABLE_SIZE
先前使用#define
定义时编译,与其值无关。如果未定义,则该行将在程序编译中不包含。
#if
,#else
和#elif
(即“else if”)指令用于指定要满足的某些条件,以便编译它们所包含的代码部分。 #if
或#elif
后面的条件只能评估常量表达式,包括宏表达式。例如:
#if TABLE_SIZE > 200
#undef TABLE_SIZE
#define TABLE_SIZE 200
#elif TABLE_SIZE < 50
#undef TABLE_SIZE
#define TABLE_SIZE 50
#else
#undef TABLE_SIZE
#define TABLE_SIZE 100
#endif
int table[TABLE_SIZE];
请注意#if
,#elif
和#else
链式指令的整个结构如何以#endif
结尾。
答案 1 :(得分:0)
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/1.7.html
此链接应向您解释指令。另外,如果#ifdef之后的条件变为true,则使用指令,编译器将编译以下代码,否则它将查找下一个指令并编译以下代码。
在你的例子中,如果USE_FORK是一个真表达式,那么将编译CODE ...,否则,将编译带有线程定义的行。
答案 2 :(得分:0)
它是一个条件组,一个预处理器命令。如果定义了宏,即USE_FORK,那么代码将执行到#else,如果没有定义宏,那么#else的代码将执行到#endif