gpt4 book ai didi

c - 在 C 中获取编译时表达式的值

转载 作者:太空狗 更新时间:2023-10-29 16:32:23 29 4
gpt4 key购买 nike

有没有办法让 C 编译器(在我的例子中是 XC16,它基于 gcc)转储编译时表达式的结果?

我们有很多#defines,比如

#define FOO 37.6
#define FOO_BASE 0.035
#define FOO_FIXEDPOINT (int16_t)(FOO/FOO_BASE)

我想知道编译器将这些表达式缩减为的实际数字。

请注意,这与想知道预处理器输出的内容是一回事;预处理器不计算数学,它只替代事物。如果我查看预处理器输出,我会(有效地)

#define FOO_FIXEDPOINT (int16_t)(37.6/0.035)

并且是编译器,而不是预处理器,计算出一个值。


这里还有一个重点:我确实可以自由地创建一个特殊的 .c 文件来执行类似的操作

#include "foo.h"

const int16_t foo_fixedpoint = FOO_FIXEDPOINT;

所以我为编译器提供了一个地方来完成它的工作并将结果作为常量。


作为一个完整的独立示例,如果我将其放入 foo.c 并运行 xc16-gcc.exe -E foo.c:

#include <stdint.h>

#define FOO 37.6
#define FOO_BASE 0.035
#define FOO_FIXEDPOINT (int16_t)(FOO/FOO_BASE)

int main()
{
int x = FOO_FIXEDPOINT;
}

我得到这个输出:

[... typedefs elided ...]
int main()
{
int x = (int16_t)(37.6/0.035);
}

最佳答案

检查 debugging options 中的标志 -fdump-tree-*页面,以查看中间语言的输出(有点低级但非常可读)。

您可以使用 -fdump-tree-all 查看不同阶段的文件,但您可能只需要 -fdump-tree-original。在生成的 *.original 文件中查找您的主要功能:

...
;; Function main (null)
;; enabled by -tree-original

{
int x = 1074;

int x = 1074;
}

关于c - 在 C 中获取编译时表达式的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31149454/

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