【发布时间】:2015-08-12 09:37:29
【问题描述】:
我有以下代码(CPU Atmel AVR ATmega64A):
#define UO_ADC1023 265
#define UREF_180V (1023*180/UO_ADC1023)
....
if(ADC > UREF180) {do_something();}
这应该将 UREF_180V 评估为 694.87...,并且应该将此值四舍五入(更好)到 695 或向下(较差)到 694,以便与 ADC 寄存器进行比较。
但是我在编译时有integer overflow 警告。据此,我认为编译器生成的代码会在运行时计算 (1023*180/UO_ADC1023),这对我来说非常糟糕。
我想避免自己计算这些常量(#define UREF_180V 695 在这种情况下我可以确定它们确实是文字)以使代码更加灵活和可读。我还希望能够在编译器之后检查这些值。
所以问题是:
是否有可能强制 GCC 编译器在编译时计算这些常量?
如何检查这个计算值?
【问题讨论】:
-
你的编译器链支持 C++11 吗?
-
@weltensturm,我不确定 :( 编译器设置截图:goo.gl/glQjfd
标签: gcc compilation macros constants avr