请告诉我为什么这段代码是用C ++ 11标准编译的:
#include <iostream>
using namespace std;
int main()
{
abs(-12);
exit(1);
return 0;
}
没有错误g++ -std=++11 main.cpp
此错误g++ main.cpp
如果您删除#include <iostream>
,则在编译程序时会在exit()
和abs()
上收到错误。
如果我不包括<cstdlib>
,请告诉我为什么会发生这种情况?如何做到这一点将编译为-std=c++11
是一个警告或错误?
答案 0 :(得分:4)
答案非常简单:代码编译,因为在C ++ 11下,iostream
lib包括定义了exit()
和abs()
的其他库。你不会收到警告或错误。你为什么这样?支持所有级联包含后。
但是你不应该依赖它,因为那不是标准的一部分,可能会在不同的编译器下破坏。但我想只要你坚持使用一个编译器和一个-std
标志你就可以了。通过添加一些包含来解决这个问题也不是什么大问题。