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

How to suppress the compiler warning on unused variable in C?

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

  1. 使用编译器指令,我犹豫了,因为它们依赖于编译器
  2. 从变量中添加一个虚拟读取,例如:

    volatile int var;
    
    var = peripheral_register;
    
    var = var;
    

你有更好的主意吗?

定义一个宏为

#define unused(x) ((void)x)

如果 peripheral_register 是未使用的变量,只需将宏调用为 未使用(peripheral_register)。这将删除警告。

您的变量已被使用。读取 volatile 变量是一种副作用。

如果你得到编译警告,我强烈怀疑你的编译器不符合C标准。您应该反汇编成代码以确保读取确实发生。否则,您的编译器将无法修复。

也就是说,您可以将任何表达式强制转换为 (void) 以消除编译器警告,例如 (void)var;。但在这种情况下你不需要这样做。

如果你需要做的只是读取寄存器(例如清除一些状态标志),那么你根本不需要接收变量:

(void)peripheral_register ;

假设寄存器本身被声明为易失性就足够了,因此必须读取它。

否则你可以通过外部链接使你的虚拟 var 全局化——这样编译器就无法确定它没有被其他地方读取;但这是一个更丑陋的解决方案。