这将在啥时候执行?

Posted

技术标签:

【中文标题】这将在啥时候执行?【英文标题】: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。 【参考方案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);

【讨论】:

以上是关于这将在啥时候执行?的主要内容,如果未能解决你的问题,请参考以下文章

afterpropertiesset在啥时候执行

IList 在啥时候导致查询在 ORM 中执行?

jquery 分页插件pagination的回调函数callback在啥时候执行?有啥用?

闭包有啥好处,它们通常在啥时候使用?

grunt js在啥地方执行

memcpy在啥情况下会失败