如何抑制编译器对 C 中未使用变量的警告?
How to suppress the compiler warning on unused variable in C?
对于嵌入式系统中的外设需求,我必须声明一个变量来读取寄存器,但以后不会使用该值。因此,我自然会收到关于未使用变量的编译器警告。
我怎样才能抑制警告?我有两种方法:
- 使用编译器指令,我犹豫了,因为它们依赖于编译器
从变量中添加一个虚拟读取,例如:
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
全局化——这样编译器就无法确定它没有被其他地方读取;但这是一个更丑陋的解决方案。
对于嵌入式系统中的外设需求,我必须声明一个变量来读取寄存器,但以后不会使用该值。因此,我自然会收到关于未使用变量的编译器警告。 我怎样才能抑制警告?我有两种方法:
- 使用编译器指令,我犹豫了,因为它们依赖于编译器
从变量中添加一个虚拟读取,例如:
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
全局化——这样编译器就无法确定它没有被其他地方读取;但这是一个更丑陋的解决方案。