草庐IT

c++ - GCC如何处理变量重定义

我写了一段这样的代码inta;inta=100;intmain(){}GCC编译成功,G++编译失败。我猜GCC通过忽略变量a的第一个定义来处理这个问题。但我想知道准确的规则,这样我就不会错过任何东西。谁能帮帮我? 最佳答案 在C中inta;/*Tentativedefinition*/inta=100;/*Definition*/来自C11规范中的6.9.2外部对象定义:Adeclarationofanidentifierforanobjectthathasfilescopewithoutaninitializer,andwith

c++ - 是否有 GCC pragma 来打开和关闭 C++11?

我有一些与C++11冲突的header,但我想在我的代码中使用初始化列表等功能。我的研究表明,您只能在命令行启用更新的功能,例如:g++-std=c++11我真正想要的是放入我的代码:#pragmaCXX11_OFF#include#pragmaCXX11_ONvectorv{1,2,3};我没能找到这样的编译指示。存在吗? 最佳答案 没有。这样的编译指示不存在。您可以在§6.61ofthemanual中找到GCC支持的所有编译指示列表。. 关于c++-是否有GCCpragma来打开和关

c++ - GCC 没有链接正确的库

我的系统上安装了两个版本的GCC4.6.2和4.7.0。我正在运行FedoraCore16。4.6.2安装在/usr/bin中,4.7.0安装在/home/nerozehl/local/bin中。C++的库和运行时也在/home/nerozehl/local/lib和/home/nerozehl/local/lib64中编译和安装。我还安装了两个版本的Boost,库位于/usr/lib64和/home/nerozehl/local/lib中。(分别提升1.47.0和1.49.0)我遇到的问题是g++/ld正在链接默认库,而不是/home/nerozehl/local中的新库。我正在使用

c++ - 为什么模板化的派生类可以在 gcc 上访问其基私有(private)成员?

我正在学习C++。现在我明白派生类不能访问其基类的私有(private)成员,但为什么模板化的可以?例如这样的东西很好用:classbase{staticintx;};templateclassderived:publicbase{Tt;public:voidsetx(inti){x=i;}intgetx(){returnx;}};我在Linux上使用gcc5.4。 最佳答案 这是GCC的一个已知错误,它似乎无法在模板中正确执行访问检查。参见Bug58740.不幸的是,它仍然没有修复。顺便说一句:Clang未能按预期编译。

c++ - 我怎样才能告诉 gcc 在不中断的情况下对 switch/case 语句发出警告(或失败)?

我有一个复杂的switch语句,我忘了在其中一个case的末尾放置一个break。这是完全合法的,因此我无法进入下一个案例。如果我忽略放置break语句,是否有任何方法让gcc发出警告(或者甚至更好,失败)?我意识到有许多有效的用例(我经常在我的代码中使用它们),如thisquestion中所示。,所以显然这样的警告(或失败)需要一个简单的豁免,这样我就可以轻松地说,“我确实想在这里失败。”有什么方法可以告诉gcc这样做吗? 最佳答案 在http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7652

c++ - 从临时流中提取字符时出现 GCC 编译器错误

我正在尝试从流中读取单个字符。使用以下代码,我得到一个“模糊重载”编译器错误(GCC4.3.2,and4.3.4)。我做错了什么?#include#includeintmain(){charc;std::istringstream("a")>>c;return0;}备注:VisualStudio2008编译无误其他类型(int、double)都可以用如果我首先创建一个变量std::istringstreamiss("a");iss>>c,编译器没有报错 最佳答案 字符的提取操作符>>>是一个非成员函数模板:templatebasic

c++ - 将 AVX 与 GCC 一起使用 - 缺少 avxintrin.h

我在Ubuntu-64位12.04LTS上运行我的笔记本电脑(coreI5)。我正在尝试进入AVX以生成一些随机数。在Eclipse-CDT中,我使用LinuxGCC创建了一个新的C++“HelloWorld”项目。我包含了immintrin.h并尝试加载__m256类型的东西。编译器抛出一个错误:在此范围内未声明类型“__m256”我查看了immintrin.h并查找了avxintrin.h,以防万一,有拼写错误。单击avxintrin.h上的打开声明时,Eclipse说:Couldnotfindincludefile'avxintrin.h'onincludepaths无论如何,该

c++ - GCC#pragma 消息被忽略

我正在尝试displayacompile-timemessageinGCC,通过#pragmamessage"helloworld"但是当我用-Wall编译时它给出了警告warning:ignoring#pragmamessage我在MacOSX10.6.8(SnowLeopard)上使用GCC4.2.1。为什么不显示消息?如何让它显示消息? 最佳答案 如果您阅读correctdocumentation,您会发现GCC4.2.1不支持#pragmamessage。 关于c++-GCC#p

c++ - 如何在GCC编译器中启用最高警告级别(Boost被大量使用)

我刚读了一本书,建议在GCC中启用最高警告级别。刚上网查了一下文档,发现参数太多了。我想启用最高警告级别,我应该使用哪个参数?我们在项目中大量使用了Boost。 最佳答案 与具有4个级别的cl相反,gcc只有一组选项可以打开或关闭。正如其他人所提到的,-Wall是默认设置,它已经打开了许多警告。-pedantic选项增加了一些内容。还有-Wextra又是一组...但要真正捕获许多警告,您必须手动添加许多。有一个我喜欢使用的集合,虽然有人告诉我其中有些是矛盾的,但我发现这个列表对我的开发工作相当有用:-Werror-Wall-Wext

c++ - 当编译器从代码中取出所有空格和注释时,GCC 如何知道错误发生在哪一行?

我确信这也适用于其他编译器,但我只使用过GCC。如果编译器通过删除非代码的所有无关内容(注释、空格等)来优化代码,它如何正确显示原始文件中的错误所在行?它是否仅在检查错误后才优化代码?或者它是否以某种方式插入标签,以便在发现错误时知道它在哪一行?mycode.cpp:Infunction‘foo(intbar)’:mycode.cpp:59:error:nomatchingfunctionforcallto‘bla(intbar)’ 最佳答案 编译器将源代码转换为对象格式,或者更多正确地,这里是稍后将使用的中间格式生成对象格式。我没