什么时候会执行?

时间:2017-05-09 06:09:21

标签: c c-preprocessor preprocessor-directive

我有一个C代码:

... 
void caller() {
    #define YES 1
    #define NO 0
}
...

#define被调用/执行时,两个caller行是否会执行,或者它们是否仅在编译时执行。

1 个答案:

答案 0 :(得分:3)

prerpcessor宏不执行,它们只是代码的片段,如果你使用它们,它们将被预处理器替换为它们的内容。阅读有关预处理器宏here的更多信息。

因此,在预处理之后,您的代码将是:

void caller() {
}

假设您在YES之后使用#define宏:

#define YES 1
#define NO 0

void caller() {
    printf("My answer is: %d", YES);
}

预处理后,上面的代码如下:

void caller() {
    printf("My answer is: %d", 1);
}