草庐IT

c++ - g++ : Is there a way to access compile flags inside the code that is being compiled?

有没有一种方法(例如,定义的常量)来访问正在编译的代码中运行编译器的编译标志。例如,我想要一个程序来写入编译时使用的标志。intmain(){std::coutgcc/g++是否存在这样的常量?或者更好:是否有在gcc和clang中都定义的常量?我对检查优化级别和-march标志的值特别感兴趣。那么,如果没有显示所有标志的常量,是否至少有显示这些值的常量? 最佳答案 以下命令打印出所有预定义的宏:g++-dM-E-这适用于gcc和g++。您可以自行检查-不幸的是,没有宏可让您轻松访问完整的gcc/g++命令行。幸运的是,大多数-m.

c++ - 如何找到在 g++ 代码中调用给定成员函数或 ctor 的所有位置?

我试图在一个庞大而陈旧的代码库中找到所有调用了某些构造函数或函数的地方。具体来说,这些是std::string中的某些构造函数和成员函数。类(即basic_string)。例如,假设有一行代码:std::stringfoo(fiddle->faddle(k,9).snark);在这个例子中,看这个并不明显snark可能是char*,这是我感兴趣的。目前尝试解决这个问题我研究了gcc的一些转储功能,并生成了其中一些功能,但我没能找到任何告诉我给定代码行将生成对string的调用的信息。构造函数采用constchar*.我还使用-s编译了一些代码以保存生成的等效汇编代码。但这有两个问题:函

c++ - 使用 g++ 和 specs 文件进行预处理

问题涉及arm-none-eabi-g++6.2和针对newlib-nano的链接。当我使用-specs=nano.specs预处理C源代码时,文件newlib.h来自目录newlib-nano包括:echo'#include'|\/opt/gcc-arm-none-eabi-6_2-2016q4/bin/arm-none-eabi-gcc-specs=nano.specs-xc-E-|\grep'^#1.*newlib\.h'输出#1"/opt/gcc-arm-none-eabi-6_2-2016q4/arm-none-eabi/include/newlib-nano/newlib.

c++ - g++ 无法解析模板函数重载

对于以下代码,g++失败:templateinlinevoidfunc(constT&,R...){}templatestructS{};templateinlinevoidfunc(constS&,R...){}intmain(){func(42);func(S());//OKfunc(S(),1);//NOKfunc(S(),1);//NOK}与::Infunction'intmain()'::13:21:error:callofoverloaded'func(S,int)'isambiguousfunc(S(),1);//NOK^:13:21:note:candidatesare

c++ - g++ 4.8.2 在列表方法参数默认初始化时出错

我在尝试c++11的新特性时发现了一个问题。这是我的代码:#include#include#includeusingnamespacestd;classA{public:intf(lista,listb={}){coutl{"hello","world"};a.f(l);return0;}执行停留在“Thisline!!!”线。我继续调试,看起来问题就在这里。/**Returnsthenumberofelementsinthe%list.*/size_typesize()const_GLIBCXX_NOEXCEPT{returnstd::distance(begin(),end());

c++ - g++ 在 -Os 启用错误标志

目前,我正在使用GNUC++编译器和-Os优化选项进行一些实验,以获得最小的代码大小。我使用以下命令在-Os处检查了启用的编译器标志:g++-c-Q-Os--help=optimizers|grep"enabled"我得到了这个启用选项列表:-faggressive-loop-optimizations[enabled]-falign-functions[enabled]-falign-jumps[enabled]-falign-labels[enabled]-falign-loops[enabled]-fasynchronous-unwind-tables[enabled]...这似

python - 需要哪个 $path 以便 g++/pybind11 可以找到 Python.h?

我开始使用pybind11(在Ubuntu16.04和Python2.7上)。为了试水,我围绕我的C++库创建了一个无操作的包装器。唉,编译找不到Python.h:$g++-std=c++0x-fPIC-pedantic-g-Wno-missing-field-initializers-Wno-switch-Wno-multichar-ftree-vectorize-ftree-vectorize-mssse3backend.huvc-v4l2.cppwrap.cpp-owrap.sobackend.h:4:9:warning:#pragmaonceinmainfile#pragmao

c++ - g++ 处理复制 std::complex

作为自学项目的一部分,我研究了g++如何处理std::complex-类型,并对这个简单的函数感到困惑:#includestd::complexc;voidget(std::complex&res){res=c;}为Linux64使用g++-6.3-O3(或-Os)编译我得到了这个结果:movsdc(%rip),%xmm0movsd%xmm0,(%rdi)movsdc+8(%rip),%xmm0movsd%xmm0,8(%rdi)ret所以它将实部和虚部分别移动为64位float。但是,我希望程序集使用两个movups而不是四个movsd,即将实部和虚部作为128位包同时移动:movu

c++ - 在 g++ 中使用 __attribute__ 的不平衡括号

今天我在前段时间开发的一个项目上尝试了clang。当它遇到编译错误时我很惊讶,因为我已经使用g++成功编译了我的项目。这个简短的片段重现了遇到错误的行:intmain(){__attribute__((aligned(16))chararr[5];}产生此错误的原因:test.cpp:2:32:error:expected')'__attribute__((aligned(16))chararr[5];^)如您所见,有一个不平衡的括号。有三个“(”和两个“)”。这显然看起来应该会产生编译错误。这是该关键字的有效用法吗?我似乎无法在thedocumentation上找到任何内容这表明它是

c++ - 如何使用 -std=c++17(可选、任意、string_view、变体)在 g++ 6.2.0 中包含 C++ 17 header

std::optional在C++17中,它是std::experimental::optional之前。我尝试编译一个包含的文件,使用命令:g++-std=c++17.cpp(在Bash终端中)。我收到以下错误:.cpp:5:20fatalerror:optional:Nosuchfileordirectory#include^compilationterminated但我可以#include就好了。我是否缺少一些头文件?如何包含optional标题?我也不能包含,或,得到同样的错误。 最佳答案 你不能。GCC6.2'ssuppo