日期:2014-05-16  浏览次数:20558 次

源码中看到一种很奇怪的函数调用,怎么回事?
void
bug(const char* p_text)

...  
  (void) vsf_sysutil_write_loop(0, "500 OOPS: ", 10); // 函数调用前面为何还要放(void) ?
...
  vsf_sysutil_exit(1);
}

------解决方案--------------------
函数调用语句前面加 (void) ,类似变量的强制转换, 不要返回值。
------解决方案--------------------
我觉得这个是多余的。

当然你可以反汇编对比下,加不加的区别。

------解决方案--------------------
因为如果函数有返回值而你不接受的话编译器可能警告,所以强转void消除警告。
------解决方案--------------------
这样啊
------解决方案--------------------
探讨

引用:

因为如果函数有返回值而你不接受的话编译器可能警告,所以强转void消除警告。

有警告可以不理会啊,为何要加void呢,不是很麻烦么?

------解决方案--------------------
真正的开发人员,或者说合格的研发工程师,是不会放过一个警告的,编译无警告是代码评审的一个基本前提。

通过修改编译选项来消除警告是自欺欺人的一种做法。
尽量不要通过编译选项来消除警告,要让警告置于自己的控制范围之内,类似于你的这个bug函数的实现。

探讨

引用:

因为如果函数有返回值而你不接受的话编译器可能警告,所以强转void消除警告。

有警告可以不理会啊,为何要加void呢,不是很麻烦么?

------解决方案--------------------
探讨

真正的开发人员,或者说合格的研发工程师,是不会放过一个警告的,编译无警告是代码评审的一个基本前提。