【发布时间】:2013-09-15 01:38:57
【问题描述】:
我正在做一些微控制器编程,并且我有如下代码:
#define F_CPU 8000000
#define F_ADC (F_CPU / 64.0)
#define T_ADC (1.0/F_ADC)
有没有办法在编译时打印出 T_ADC 的计算值?我试着把它串起来
#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#pragma message ("T_ADC " STRINGIFY(T_ADC))
但这只是给出了宏扩展“(1/(8000000/64))”,而不是实际值。
这是一个微控制器程序,在启动时执行printf 很尴尬。我正在使用 gcc,如果有帮助,我很乐意使用任何非标准 gcc 功能。
【问题讨论】:
-
我假设您并不是要在
#define语句中包含=符号。 ;) 而且,不幸的是,预处理器将定义替换为字符串并且不计算它们。算术由实际编译器完成,结果仅在编译结果中。虽然我不知道是否有一个工具可以在某处进行计算。 -
这并不完全符合您的要求,但如果您知道至少几种可能的后评估值组合,您可以尝试这里讨论的内容:stackoverflow.com/questions/1560357/…
-
修复了#defines中的=;我已经有一段时间没有写任何 C 了! (试图即时制作一个简单的示例,而不仅仅是复制我的代码。)
-
对于 VC++ 用户,有 VC++ 技巧可以在不依赖编译错误的情况下打印编译时间常数:在此处查看我的答案:stackoverflow.com/questions/28852574/…
标签: c gcc microcontroller