自从我多年前意识到这一点,默认情况下这不会产生错误(至少在GCC中),我一直想知道为什么?
我知道您可以发出编译器标志来产生警告,但是它不应该总是出错吗?为什么非void函数没有返回值才有效?
评论中要求的示例:
#include <stdio.h>
int stringSize()
{
}
int main()
{
char cstring[5];
printf( "the last char is: %c\n", cstring[stringSize()-1] );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
...编译.
您为不同的C/C++编译器推荐了什么编译器警告级别?
gcc和g ++会让你在默认级别上获得很多东西.我发现对我来说最好的警告级别是'-Wall'.我总是试图删除修复它生成的警告的代码.(即使是愚蠢的关于使用括号进行逻辑优先规则或者说我的意思是'if(x = y)')
对于不同的编译器,您最喜欢的级别是什么,例如Sun CC,aCC(HPUX?),Visual Studio,intel?
编辑:
我只想指出我在gcc/g ++上没有使用"-Werror"(但我确实理解它的实用性),因为我使用:
#warning "this is a note to myself"
在我的代码中的几个地方.所有编译器都了解#warning宏吗?