2017-09-20 57 views
6

从标题可能不清楚。我在嵌入式STM32项目中遇到以下代码。我不明白函数内部的行。C:“(void)ptr;”

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

我试过其他地方网上搜索,但大多数结果被转换指针void的指针,我不认为这是。谢谢您的帮助!

+3

这意味着“不要告诉我,我写不好的代码,我打算* *不要用论据”。 C编译器对它有点肛门分析并且倾向于产生警告。经常适当,但只是不在这里。在传输结束时他不想做任何特殊的事情,这并不罕见。函数指针不是他的选择。 –

+0

@HansPassant这可能是由于来自外部方的强制API和/或为了统一起见 - 例如,可以使用指针的替代实现。 – SomeWittyUsername

+0

是的,这就是“功能指针不是他的选择”的意思。 –

回答

12

这只是一个portable way to suppress the warning关于这个未使用的uart参数。

它没有任何效果,但编译器可以看到使用过程中,不发出任何警告。

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

(注意:gcc利于__attribute__((unused))结构,比较容易理解,但所有的编译器不兼容)

+0

嗯......呃......为什么不告诉编译器不要警告而不是编写无意义的代码? – savram

+2

因为你想警告你不知道这个地方是你如何防止你的地方。一些编译器有一个编译指示或指令,但gcc和其他编译器会让你只需要执行x = x;或者也许在这种情况下是x; –

+2

@savram你可能想要警告其他未使用的变量。 – Gam

相关问题