Build 时的 C 预处理器输出 int

C Preprocessor output int at Build

我想看看预处理器计算的输出。仅适用于字符串,因此:

#define XSTR(x) STR(x)
#define STR(x) #x

#define BEGIN "test"

#pragma message ".text= " XSTR(BEGIN)

当我将 BEGIN 设置为 32/2 时,输出为:#pragma message: .text= 32/2.

我该怎么做才能解决这个问题?我不会在 .lss 文件中搜索这样的解决方案:

uint16_t x = BEGIN;
PORTB = x>>8;
PORTA = x;

谢谢。

C 预处理器仅执行文本替换。

第一次看到折叠常量的机会是在 -fdump-tree-all 的树转储中,然后检查 *.t<nnn> 转储。

要从编译器正确获取 asm 输出,请尝试 -safe-temps -fverbose-asm,它将 C 源代码作为 asm 注释混合插入 *.s 文件中。

What can i make to solve this?

您必须在预处理器中执行数学运算。例如:

#define _div_1_over_1  1
#define _div_2_over_1  2
#define _div_3_over_1  3
// etc...
#define _div_30_over_2  15
#define _div_31_over_2  15
#define _div_32_over_2  16
// etc...
// etc. for every possible a_over_b combinations, many many 1000 lines
#define DIV(a, b)  _div_##a##_over_##b

之后,您终于可以:

#define XSTR(x) STR(x)
#define STR(x) #x

#define BEGIN DIV(32, 2)

#pragma message ".text= " XSTR(BEGIN)

假设这是在预处理器中实现除法的一种方法。对于其他解决方案,请参阅 p99 库中的 BOOST_PP_DIV and P99_DIV