tl; dr:我可以以某种方式使这段代码在C ++ 14(GCC 6.3)中运行吗?
int main(){
#include<vector>
std::vector<int> v{1,2,3};
return 0;
}
但是下面的代码工作正常!
#include <iostream>
using namespace std;
int main() {
#include<cstdio>
using namespace __gnu_cxx;
printf("Hello world\n.");
return 0;
}
使用C ++ 14(gcc-6.3)代码无法编译,错误消息为
error: 'namespace' definition is not allowed here
namespace std
^~~~~~~~~
为什么我要这样做?
我无权访问允许编码的函数。我不能在全球范围内#include。
UPD:更改为cstdlib也有问题,不是通过标头保护(根据我)排除问题,而是名称空间问题。因为C ++头文件具有命名空间std,而c头文件没有。我想问一下命名空间问题是否有一些调整?
答案 0 :(得分:5)
我可以以某种方式使这段代码工作
没有。标准头文件(通常是大多数库头文件)必须包含在全局命名空间范围内。
但是下面的代码工作正常!
但它不能保证有效。它恰好正常工作,可能是因为<iostream>
已经包含<cstdio>
,所以你自己的包含被标题保护删除了。