如何抑制C中未使用变量的编译器警告?

时间:2016-11-02 02:09:14

标签: c embedded compiler-warnings

对于嵌入式系统中的外设要求,我必须声明一个变量来读取寄存器,但稍后不会使用该值。因此,我自然会收到有关未使用变量的编译器警告。 我怎么能抑制警告?我有两种方法:

  1. 使用编译器指令,我犹豫,因为它们是编译器相关的
  2. 从变量添加虚拟读取,如:

    volatile int var;
    
    var = peripheral_register;
    
    var = var;
    
  3. 你有更好的主意吗?

3 个答案:

答案 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;。但在这种情况下你不应该这样做。