相关疑难解决方法(0)

为什么在没有返回值的情况下流出非void函数的末尾不会产生编译器错误?

自从我多年前意识到这一点,默认情况下这不会产生错误(至少在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++

157
推荐指数
5
解决办法
4万
查看次数

C/C++编译器的最佳编译器警告级别?

您为不同的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宏吗?

c c++ compiler-construction warnings

45
推荐指数
5
解决办法
3万
查看次数

标签 统计

c ×2

c++ ×2

compiler-construction ×1

g++ ×1

gcc ×1

warnings ×1