gpt4 book ai didi

c - 预处理器常量折叠

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:34 24 4
gpt4 key购买 nike

我有一个关于 C 预处理器常量评估的基本问题,我希望获得一些帮助,以了解预处理器是否有助于在这种情况下优化代码。我知道预处理器只是在代码中“替换文本”。根据该规则,即使是常量表达式也会在代码中被替换。例如下面的代码:

#include <stdio.h>

#define MY_NUM 2+2*2

int main()
{
int a = 6/MY_NUM;
printf("a: %d\n", a);
return 0;
}

a 的值为 7。这是因为预处理后的代码如下所示:

int main()
{
int a = 6/2+2*2;
printf("a: %d\n", a);
return 0;
}

我可以看到在编译开始之前 MY_NUM 的计算结果不是 6。当然,编译器随后会在编译时通过计算 a 的值来优化代码.

我不确定是否会发生预处理器常量折叠,或者是否有可能。或者有什么方法(gcc 中的标志)来启用它。常规的 -O 优化不会启用此功能。无论如何我们可以在这里改变预处理器的行为吗?

我的代码使用 gcc 4.8.4。

最佳答案

不,预处理器计算任何表达式的唯一时间是在 #if/#elif 中。

你可以通过标记连接和大量宏来实现它来伪造算术,但这比简单地做要难得多

#define MY_NUM (2+2*2)

但是没有简单的编译器开关,因为宏扩展只是标记替换。

关于c - 预处理器常量折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51094028/

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