我知道如何禁用所有未知的#pragma警告。例如,在HowcanIdisable#pragmawarnings?中给出了答案。.有没有办法为一个特定的编译指示禁用“未知编译指示”警告?例如,如果我禁用#pragmaugubugu以下代码的警告:#pragmaugubugu#pragmauntiuntiintmain(){return0;}当编译时:g++pragma.cpp-Wallclang++pragma.cpp-Wall应该产生一个警告:warning:ignoring#pragmauntiunti例如,也许有一种简单的方法来注册一个什么都不做的自定义编译指示?很高兴知道Visu
我刚刚升级到GCC4.8,一些可变参数模板代码不再正确编译。我在下面创建了一个最小的示例:#include#includetemplatevoidsomething(std::tuple&tup){std::cout(tup)myTuple(3,'a',true);//CompilesOKinGCC4.6.3butNOT4.8something(myTuple);//CompilesOKinGCC4.8butNOT4.6.3something(myTuple);return0;}此输出将是(如果注释掉GCC4.6.3/4.8的错误版本)'一个'。GCC4.6.3产生的错误是:./tes
我刚刚升级到GCC4.8,一些可变参数模板代码不再正确编译。我在下面创建了一个最小的示例:#include#includetemplatevoidsomething(std::tuple&tup){std::cout(tup)myTuple(3,'a',true);//CompilesOKinGCC4.6.3butNOT4.8something(myTuple);//CompilesOKinGCC4.8butNOT4.6.3something(myTuple);return0;}此输出将是(如果注释掉GCC4.6.3/4.8的错误版本)'一个'。GCC4.6.3产生的错误是:./tes
我收到了很多关于开关的警告,这些警告仅部分覆盖了切换的枚举范围。因此,我想为所有这些开关设置一个“默认值”,并在这种情况下放置__builtin_unreachable(GCC内置),以便编译器知道这种情况是不可达的。但是,我知道GCC4.3还不支持该内置函数。有什么好方法可以模拟该功能吗?我考虑过取消引用空指针,但这可能会产生其他不良影响/警告等。你有更好的主意吗? 最佳答案 您可以调用声明为_Noreturn的内联函数,以将该调用之后的任何内容标记为无法访问。允许编译器在这样的函数之后抛出任何代码。如果函数本身是static(并
我收到了很多关于开关的警告,这些警告仅部分覆盖了切换的枚举范围。因此,我想为所有这些开关设置一个“默认值”,并在这种情况下放置__builtin_unreachable(GCC内置),以便编译器知道这种情况是不可达的。但是,我知道GCC4.3还不支持该内置函数。有什么好方法可以模拟该功能吗?我考虑过取消引用空指针,但这可能会产生其他不良影响/警告等。你有更好的主意吗? 最佳答案 您可以调用声明为_Noreturn的内联函数,以将该调用之后的任何内容标记为无法访问。允许编译器在这样的函数之后抛出任何代码。如果函数本身是static(并
假设我有一个非常简单的C文件(称为foo.c):intmain(){printf("foo");return0;}现在我调用gcc:gccfoo.c当我调用gcc时(没有选项,如上例所示),默认链接了哪些库,它们位于何处?(在MacOSX10.7上) 最佳答案 gcc的-v选项将导致它转储有关它将使用的默认选项的信息,包括库路径和默认库以及将链接的目标文件在。如果您提供-Wl,--verbose选项,gcc会将--verbose传递给链接器,链接器将准确转储它正在寻找库的位置,包括失败和成功的搜索。结合这两个选项,您将确切地看到链接
假设我有一个非常简单的C文件(称为foo.c):intmain(){printf("foo");return0;}现在我调用gcc:gccfoo.c当我调用gcc时(没有选项,如上例所示),默认链接了哪些库,它们位于何处?(在MacOSX10.7上) 最佳答案 gcc的-v选项将导致它转储有关它将使用的默认选项的信息,包括库路径和默认库以及将链接的目标文件在。如果您提供-Wl,--verbose选项,gcc会将--verbose传递给链接器,链接器将准确转储它正在寻找库的位置,包括失败和成功的搜索。结合这两个选项,您将确切地看到链接
在旧的gcc-4.4.0和gcc-4.6.4中测试代码,编译器能够应用智能优化和预计算const输入的结果:#include#includeusingnamespacestd;constautoN=1000000000ULL;//constexptristested,noeffectunsignedlonglongs(unsignedlonglongn){autos=0ULL;for(autoi=0ULL;i(t2-t1).count();coutN是一个常数值,编译器可以在编译时运行函数s并将结果赋值给x。(N不需要运行时计算)导致不同版本的gcc(以及一个版本的clang):最新版
在旧的gcc-4.4.0和gcc-4.6.4中测试代码,编译器能够应用智能优化和预计算const输入的结果:#include#includeusingnamespacestd;constautoN=1000000000ULL;//constexptristested,noeffectunsignedlonglongs(unsignedlonglongn){autos=0ULL;for(autoi=0ULL;i(t2-t1).count();coutN是一个常数值,编译器可以在编译时运行函数s并将结果赋值给x。(N不需要运行时计算)导致不同版本的gcc(以及一个版本的clang):最新版
gcc4.9允许以下代码,但gcc4.8和clang3.5.0拒绝它。voidfoo(autoc){std::cout我得到warning:ISOC++forbidsuseof'auto'inparameterdeclaration[-Wpedantic]在4.9但在4.8和clang我得到error:parameterdeclared'auto'. 最佳答案 是的,这是一个扩展。我相信它可能会作为“概念”提案的一部分添加到C++17中。 关于c++-auto作为常规函数中的参数是GCC