草庐IT

gcc-statement-expression

全部标签

c++ - 如何同时满足 gcc4.1.2 和 gcc 4.7.3

一个项目需要在gcc4.1.2(公司服务器)和gcc4.7.3+(桌面linux系统)下编译,遇到一些问题:1.gcc4.1.2没有Wno-unused-result和Wno-unused-but-set-variable。我尝试用Wno-unused替换后两者,但仍然生成忽略返回值的内置函数错误。2.gcc4.1.2中也没有Wno-narrowing,还有什么我可以用的吗?我应该怎么做才能让他们都开心? 最佳答案 我建议您在makefile中处理两个版本之间的差异。您可以检测GCC版本,如果GCC版本支持它们,则可以pramati

c++ - Visual Studio C++ 2013 express 中的警告 c4819 - 没有 bom 的 utf8 文件

在visualstudioC++2013express中,似乎除非utf8编码文件有BOM标记,否则编译器无法理解正在编译的文件采用UTF8编码并将其视为采用native编码。而代码编辑器则没有这个问题。warningC4819:Thefilecontainsacharacterthatcannotberepresentedinthecurrentcodepage(932).SavethefileinUnicodeformattopreventdataloss是否有解决此问题的方法?我记得这是所有visualstudio版本中的常见问题,但我不记得曾经看到过修复程序。我不能一直为每个不

c++ - clang 和 gcc 在处理模板生成和静态 constexpr 成员时的不同行为?

考虑以下程序(抱歉太长了;这是我能想到的表达问题的最短方式):#include#include#includeusingnamespacestd;std::vector&test_vector(){staticstd::vectorrv;returnrv;}templateclassRegistrarWrapper;templateclassRegistrar{Registrar(){auto&test_vect=test_vector();test_vect.push_back(std::type_index(typeid(T)));}friendclassRegistrarWrap

c++ - 如何从 gcc 的预编译头文件中获益最多?

我有一个包含许多目标的C++项目,其中包括大量boost头文件和其他行密集型头文件。大多数目标都包含相同的header。因此,我认为这可能是使用预编译头文件(pch)的理想选择。所以我创建了一个包含最多头文件的头文件并对其进行了预编译。这将编译单元的代码行从350k减少到120k(我将-save-temps标志传递给gcc以进行检查)。我检查它是否与-H参数一起使用,并且pch前面有一个感叹号。预编译头有550MB。不过,编译时间只从23秒减少到20秒。预编译header是否会带来这种小改进?如果不是,我做错了什么?预编译header的编译速度最快的是什么?编辑:这是gcc命令:/us

c++ - 模板的 typedef 包括 char[][] - 适用于 VS2008 但不适用于 gcc

我有一些正在使用的库代码。它在VisualStudio(2008)下编译和工作,但不是GCC(v4.8.4.)在标题中我们有:externconstcharmenu_styles[MENU_COUNT][MAX_LEN];typedefSysEnumMenuStyleEnum;SysEnum在哪里(在另一个文件中定义):templateclassSysEnumgcc遇到错误:error:‘menu_styles’cannotappearinaconstant-expression我完全同意。(此外,它是constchar*转换为char*)。我希望VS2008只是用constchar*

c++ - 编译器 (gcc) 可以保证 c++ 循环吗?

我必须进行以下AVX操作:__m256perm,func;__m256in=_mm256_load_ps(inPtr+x);__m256acc=_mm256_setzero_ps();perm=_mm256_shuffle_ps(in,in,_MM_SHUFFLE(3,2,1,0));func=_mm256_load_ps(fPtr+0);acc=_mm256_add_ps(acc,_mm256_mul_ps(perm,func));perm=_mm256_shuffle_ps(in,in,_MM_SHUFFLE(2,3,0,1));func=_mm256_load_ps(fPtr+1

c++ - 'this' cannot be used in a constant expression error (C++)

全部。我有一个定义如下的类:classBoard{intcolumns,rows;boolboard[10][10];public:Board(int,int);voidnextFrame();voidprintFrame();};我的voidnextFrame()一直给我[rows][columns]的错误,因为对于它们两者来说“'this'不能在常量表达式中”。我怎样才能重新定义它以使其起作用?我明白这个错误。函数的定义如下,错误发生在以下代码示例的第3行。voidBoard::nextFrame(){intnumSurrounding=0;booltempBoard[rows][

c++ - 未使用值警告 : C vs C++ using gcc

是否有可能使gcc像g++那样处理C++的未使用值警告?对于像C中的p&&++*p;这样的指令,有一个警告,但对于C++则没有。设置-wno-unused-value并不是真正的解决方案,因为它还会删除有用的警告(如下面的第2行)。示例:$(gcc--version|head-1;ls-lqwe.*;catqwe.x;echo$sep;gcc-c-O2-Wallqwe.c;echo$sep;g++-c-O2-Wallqwe.cc)2>&1|sed's/^//'gcc(Debian4.9.2-10)4.9.2lrwxrwxrwx1tmltml5Jul2310:12qwe.c->qwe.x

C++ 模板元编程 : how to deduce type in expression pattern

我想要静态检查lambda的参数类型。我在下面编写了这段代码,它似乎产生了正确的结果。structB{};autolamBc=[](Bconst&b){std::coutconstexprautoArgType(R(ClosureType::*)(Arg)const)->Arg;templateusingArgType_t=decltype(ArgType(&T::operator()));//ArgType_tis"referencetoBconst"但是,我注意到,例如,标准库使用类模板特化从std::remove_reference中的引用类型中提取引用类型。所以我尝试了这种方法

c++ - 用于 openmp 4.5 卸载到 (gpu) 设备的 nvptx gcc (9.0.0/trunk) 找不到 libgomp.spec

一段时间以来,我一直在尝试安装OpenMP4.5卸载到NvidiaGPU版本的gcc,但到目前为止没有成功,尽管我越来越接近了。这次我关注了thisscript,我做了两个更改:首先,我指定了gcc的主干版本而不是7.2,其次,根据github存储库,nvptx-newlib现在包含在nvptx-tools中,所以我删除了那部分脚本。为便于引用,原脚本为#!/bin/sh##BuildGCCwithsupportforoffloadingtoNVIDIAGPUs.#work_dir=$HOME/offload/wrkinstall_dir=$HOME/offload/install#L