C ++ 11 exit()和abs()不包括<cstdlib>?

时间:2017-05-09 07:41:11

标签: c++ c++11

请告诉我为什么这段代码是用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是一个警告或错误?

1 个答案:

答案 0 :(得分:4)

答案非常简单:代码编译,因为在C ++ 11下,iostream lib包括定义了exit()abs()的其他库。你不会收到警告或错误。你为什么这样?支持所有级联包含后。

但是你不应该依赖它,因为那不是标准的一部分,可能会在不同的编译器下破坏。但我想只要你坚持使用一个编译器和一个-std标志你就可以了。通过添加一些包含来解决这个问题也不是什么大问题。