今天在研究他的代码片段时,我刚刚看到一个人这样做:
void doSomething(int param) {
// stuffs
param; // <-- what does this statement do?
// stuffs
}
我尝试在互联网上寻找它并询问了我的大多数朋友,但这个看起来对他们来说也很陌生。那么,伙计们,这句话的真正作用是什么?
它可以用来删除有关未使用参数的警告。但从逻辑上讲,它什么也没做。有更好的方法可以删除有关未使用参数的警告。使用宏:
UNREFERENCED_PARAMETER( param );
或者通过从函数中删除参数的名称:
void doSomething(int /*param*/) { ...
我更喜欢后者,因为这意味着param
绝对不使用。我已经看到了UNREFERENCED_PARAMETER
被指定的实例,然后在代码中实际使用了该参数。
它可能是为了消除关于“未使用的形式参数”的编译器警告。也就是说,该参数(当前)未在函数中的其他任何地方使用,因此引入此使用以消除警告。
还有其他几种方法可以做到这一点,例如将其转换为void
:
(void)param;
但是,它们都存在相同的缺点:如果实际使用参数,它们同样有效。所以你很有可能在函数的顶部看到它们,然后想“好吧,它不使用param
”,然后当它稍后使用它时会感到惊讶。
这就是为什么我更喜欢注释掉不使用的参数名称。标识符保留在那里以提高代码可读性,但不会给出警告,如果您稍后更改代码以使用该参数,则必须显式取消注释,否则会出错。