对于嵌入式系统中的外设要求,我必须声明一个变量来读取寄存器,但稍后不会使用该值。因此,我自然会收到有关未使用变量的编译器警告。 我怎么能抑制警告?我有两种方法:
从变量添加虚拟读取,如:
volatile int var;
var = peripheral_register;
var = var;
你有更好的主意吗?
答案 0 :(得分:6)
如果您只需要读取寄存器(例如清除某些状态标志),那么您根本不需要接收变量:
(void)peripheral_register ;
足以假设寄存器本身被声明为volatile,因此必须读取它。
否则你可以通过外部链接使你的虚拟var
全局 - 这样编译器无法确定它是否在其他地方没有被读取;但这是一个更加丑陋的解决方案。
答案 1 :(得分:2)
将宏定义为
#define unused(x) ((void)x)
如果peripheral_register是未使用的变量,则只需将宏调用为 未使用(peripheral_register)。这将删除警告。
答案 2 :(得分:1)
您的变量已使用。阅读volatile
变量是一种副作用。
如果您收到编译器警告,我强烈怀疑您的编译器不符合C标准。您应该反汇编代码以确保实际进行读取。如果没有,你的编译器就无法修复。
话虽如此,您可以将任何表达式转换为(void)
以使编译器警告静音,例如(void)var;
。但在这种情况下你不应该这样做。