[英]include STL header file inside a function C++14
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头文件没有。 我想问一下是否对名称空间有一些调整吗?
我可以以某种方式使此代码有效吗
否。标准标头(以及通常的大多数库标头)必须包含在全局名称空间范围中。
但是下面的代码可以正常工作!
但这并不能保证能正常工作。 它只是碰巧起作用了,可能是因为<iostream>
已经包含了<cstdio>
,所以您自己的包含被标头后卫删除了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.