这句话在C中意味着什么:"(void)ptr;"

Tow*_*Fan 6 c embedded stm32

从标题中可能不清楚.我在嵌入式STM32项目中遇到了以下代码.我不明白函数里面的行.

    static void txend1(UARTDriver *uartp) {
        (void)uartp; // what does this do? Is it a statement?
    }
Run Code Online (Sandbox Code Playgroud)

我已经尝试在网上搜索其他地方,但大多数结果是指向void指针的指针,我不认为这是.谢谢您的帮助!

Jea*_*bre 12

这只是一种抑制此未使用uart参数警告可移植方法.

它没有任何效果,但编译器会看到使用它,并且不发出任何警告.

当函数的原型被强制/无法更改(回调函数)时非常有用,但您的实现不需要此参数.

(注意有gcc利于__attribute__((unused))构造,更容易理解,但与所有编译器不兼容)

  • 因为你想要警告你不知道的地方,这就是你如何防止你去的地方.有些编译器有一个pragma或指令,但gcc和其他编译器会让你做x = x; 或者在这种情况下可能是x; (2认同)
  • @savram你可能想要警告其他未使用的变量. (2认同)