C ifdef,else,endif指令

时间:2015-01-10 16:44:48

标签: c

让我们假设我们在C程序中有下一段代码:

#ifdef USE_FORK
  CODE...

#else 
  phtread_t thread;
  pthread_create(&thread,NULL,clientDispatch,&client);
#endif

你能解释一下这些指令是什么,ifdef,else,endif。当我们使用C指令时会发生什么?

3 个答案:

答案 0 :(得分:2)

引用cplusplus.com

预处理程序指令是程序代码中包含的行,后面是井号(#)。这些行不是程序语句,而是预处理程序的指令。预处理器在实际编译代码之前检查代码,并在通过常规语句实际生成任何代码之前解析所有这些指令。

#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