0
点赞
收藏
分享

微信扫一扫

有意思的警告:c4551 function call missing argument list

有意思的警告:c4551 function call missing argument list

原总结编译错误c++c4551vscompile error

缘起

这个端午节又在加班改 ​​bug​​,没想到改了一个长见识的 ​​bug​​。因为是过节,而且卷了一天确实有些累,没打算刨根问底。本想简单跟客户沟通一下错误代码是如何引入的。没想到客户对这个问题比较感兴趣,想把砂锅打破。好吧,恭敬不如从命。

在开始之前,先请各位看一段代码,您觉得这段代码能编译通过吗?

#include "stdafx.h"

bool AreYouOk()
{
return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
bool bImOk = true;
if (AreYouOk && bImOk)
{
printf("Yeah");
}
return 0;
}

答案是:能编译通过,但是会报警告

惊不惊喜,意不意外?项目里遇到的问题跟上面代码里的问题是一样的。​​if​​ 语句中的 ​​AreYouOk​​ 本意是想调用这个函数,但是却少写了​​()​​。最后的结果是相当于只判断了 ​​bImOk​​。

因为从生成的二进制来看,进行了两个判断:

  1. 判断

​AreYouOk​

  1. 判断

​bImOk​

如下图:

有意思的警告:c4551 function call missing argument list_编译错误

说实话解决完项目中的 ​​bug​​在意识到能确实能编译通过这个事实时,我的第一感觉是应该是项目代码里有与这个函数同名的宏吧?因为在忙碌一天的我的大脑里,我的第一反应是函数就应该与 ​​()​​ 一起使用,完全忘了函数名也可以当成变量使用(比如,可以对函数名取地址赋值给函数指针)。在清醒过来后我想:即使能编译通过,应该会报警告才对。于是在本地快速编写了上面的测试代码,编译。果然有警告—— ​​warning C4551: function call missing argument list​​。

因为项目中的警告信息太多了,已经免疫了,很少关注警告信息。这个问题就被隐藏起来了。

总结

一定要注意查看警告信息!如果可以的话,尽量开启​​把警告视为错误​​,即 ​​/WX​

您遇到过什么好玩的编译错误吗?私信聊聊吧。

欢迎各位小伙伴指出不足,提出建议!感谢关注我的博客:)

作 者:​​编程难​​

码云博客:​​https://bianchengnan.gitee.io​​

github博客:​​https://bianchengnan.github.io​​

版权所有,转载请保留原文链接:)



举报

相关推荐

0 条评论