【发布时间】:2017-10-13 15:19:56
【问题描述】:
//static int initialized;
void print(struct student *arg) {
#ifndef first_call
#define first_call 1
//if (!initialized) {
//initialized = 1;
printf("sizeof(*arg1): %lu\n", sizeof(*arg));
//}
#endif
...
}
我只想在 if 块中执行代码行一次。
我当然知道如何通过不同的方式做到这一点(评论部分)。
但我想知道为什么我的代码不能按预期工作。
谢谢。
【问题讨论】:
-
你不能使用预处理指令来做到这一点!
-
#ifndef等...是预处理器指令,因此仅在编译期间发生,而不是在执行期间发生。 -
您不想为此使用条件编译。使用简单的
if语句和全局或静态变量。 -
#ifdef 和 #ifndef 是预处理器指令,在运行程序时不计算,而是在编译之前计算。
-
感谢您的回答。但我在en.cppreference.com/w/c/preprocessor/conditional看到了类似的代码