【问题标题】:When will this execute?这将在什么时候执行?
【发布时间】:2017-05-09 06:09:21
【问题描述】:

我有一个 C 代码:

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

caller 被调用/执行时,#define 两条线会执行,还是仅在编译时执行。

【问题讨论】:

  • 在编译之前。在预处理步骤。
  • 是的......我就是这个意思。那么这是否意味着caller 方法实际上是空的?
  • 预处理器代码不执行。您的函数体将与void caller() { } 相同
  • 这里什么都不会执行...
  • 顺便说一句,在 C 中它是一个函数,而不是一个方法。空参数列表表示没有运行时参数检查,应该是:void caller(void)。 C++ 中的情况有所不同,但您将其标记为 C。

标签: c c-preprocessor preprocessor-directive


【解决方案1】:

预处理器宏不执行,它们只是代码的命名片段,如果您使用它们,预处理器会将其替换为它们的内容。阅读更多关于预处理器宏的信息here

因此,经过预处理后,您的代码将是:

void caller() {
}

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

#define YES 1
#define NO 0

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

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

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

【讨论】:

    猜你喜欢
    • 2015-04-24
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多