gpt4 book ai didi

c - 有没有办法在 C 预处理器中执行任意代码?

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:34 25 4
gpt4 key购买 nike

考虑这个程序:

#define MACRO                                   \
srand(time(NULL)); \
if (rand() % 2) \
printf("A"); \
else \
printf("B");

int main() {
MACRO;
}

它等价于下面的宏扩展程序:

int main() {
srand(time(NULL));
if (rand() % 2)
printf("A");
else
printf("B");
}

显然,if 语句是在运行时执行的,而不是在宏展开阶段。如果 if 语句在编译时执行并且有语法引用(如在 Lisp 中),我们可以(几乎)等概率地得到程序 A 和 A'。哪里答:

int main() {
printf("A");
}

和A':

int main() {
printf("B");
}

有没有办法让 GCC 针对编译时评估的条件发出 A 或 A'?

最佳答案

Is there a way to execute arbitrary code in C preprocessor?

不,这是原始 (1989) C 标准的作者有意设计的决定。他们熟悉更强大的宏系统(例如,来自 Lisp,它确实允许在编译时进行任意计算),他们认为这些使得理解一个不熟悉的程序的含义变得太困难了。

我不清楚为什么要在编译时随机选择。如果您说明您的更大目标,我们可能会更有帮助。

关于c - 有没有办法在 C 预处理器中执行任意代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54541273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com