jjzjj

c++ - 将位设置为 double 并使用 g++ 的优化标志进行编译

我正在尝试将位设置为double(IEEE标准754)。说我想“构建”一个3,我会设置双浮点表示的第51位和第62位,这样我得到二进制1.1*2,十进制为3。我写了这个简单的main:intmain(){doublet;uint64_t*i=reinterpret_cast(&t);uint64_tone=1;*i=((one这个的输出将是88883当使用g++4.3编译并且没有优化时。但是,如果我添加-O2或-O3优化标志,我会得到一个奇怪的行为。也就是说,如果我让main保持原样,我会得到相同的输出。但是,如果我删除输出4sizeof的行,那么我将得到输出0没有sizeof输出的未

c++ - operator>> 适用于 Visual C++ 2010 但不适用于 Linux 上的 G++

我有以下问题:我的代码适用于VisualC++2010,但是当我在Linux上编译它时,它被编译了,但是有些东西不起作用:这是我的Vector输入operator>>:istream&operator>>(istream&in,Vector&x){chara;in.sync();a=in.get();//getsthe'['for(inti=0;i>x._vector[i];if((i+1)!=x._n)a=in.get();//getsthe','}in>>a;//getsthe']'returnin;}_vector指向一个Complex数组,Complex的operator>>工

c++ - g++ 项目编译与 boost 单元测试

我正在尝试在Linux上编译单元测试(boost),但编译器报错。有人可以检查我的命令吗?g++-oUTest../UTest/UT1.cpp../UTest/UT2.cpp-lboost_system-lboost_thread-lboost_unit_test_framework错误/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o:Infunction`_start':(.text+0x18):undefinedreferenceto`main'我从g++命令中删除了main(),因为在使用boostuni

c++ - g++ 4.9 拒绝 C++14 中的有效聚合初始化

考虑这段代码:structS{intx;doubley=1.1;};intmain(){Ss={0};}根据C++14标准,§8.5.1/7Iftherearefewerinitializer-clausesinthelistthantherearemembersintheaggregate,theneachmembernotexplicitlyinitializedshallbeinitializedfromitsbrace-or-equal-initializeror,ifthereisnobrace-or-equal-initializer,fromanemptyinitiali

c++ - 用 g++/bison/boost::variant 编写的解析器编译速度很慢

我用bison编写了一个verilog解析器,并使用boost::variant来存储每个规则的每个变体的所有不同情况。我用一个小例子,BNF表达式规则,来展示我的数据结构:expression:primary|expression+expressionprimary:(expression)|number存储它的数据结构是:typedefboost::variant,std::shared_ptr,>expressiontypedefboost::variant,std::shared_ptr,>primary类exp1/2和prim1/2用于存储expression和primary

c++ - g++ 4.9.4 缺少 LLONG_MAX?

我试图调试这个简单的代码:#include"limits.h"intmain(){longlonga=LLONG_MAX;return0;}如果我像这样运行它g++test.cpp我明白了test.cpp:Infunction‘main’:test.cpp:5:17:error:‘LLONG_MAX’undeclared(firstuseinthisfunction)longlonga=LLONG_MAX;我检查了这个常量的引用,它说:LLONG_MIN,LLONG_MAXandULLONG_MAXaredefinedforlibrariescomplyingwiththeCstand

c++ - 奇怪的 C++ namespace 解析怪癖和 g++ 与 clang++

这个问题在这里已经有了答案:Injectedclassnamecompilerdiscrepancy(3个答案)关闭4年前。这始于观察。我更改了一些看起来有点像这样的代码(编辑:我在这里取出了指定的初始化器,它们也不在原始代码中):structS{enumE{E1,E2}member;}//file1.ccSv1={S::E1};//file2.ccSv2={S::S::E2};请注意file2.cc过度限定了E2。然而,这在g++和clang++中都有效。(编辑2:这个特定VM上的g++是g++-5.4.1,但原始代码已经通过早期和后来的g++版本,加上多个clang版本。)事实上,

c++ - g++ 在多个文件上比使用 Google mock 的单一文件慢得多

我遇到了一个似乎与g++相关的问题。基本上,当一个程序被拆分成多个文件而不是一个单一的整体文件时,g++需要花费更多的时间来编译它。事实上,如果将单个文件组合在一起并进行编译,它运行起来比在g++命令行上列出单个文件要快得多。比如9个文件,编译需要1分39秒;当我把它们放在一起时,编译只需要13秒。我试过使用strace但它只是卡在cc1plus中;当我使用-f选项时,我仍然无法找出导致问题的原因。我已经隔离了问题。这是重现它的方法。我写了一个非常简单的程序,像这样:voidfunc_01(inti){intj;volatileint*jp;jp=&j;for(;i;i--)++*jp

c++ - 将固定大小内存边界上的 native 代码与 GCC/G++/AS 对齐?

我有一个C函数,其中包含将实现字节码解释器的字节码的所有代码。我想知道是否有一种方法可以在固定大小的边界上对齐内存中的编译代码段,以便我可以直接计算从字节码的值跳转到的地址?有点像数组的工作方式,但我不是从计算的地址读取,而是跳转到它。我知道我必须将执行下一个跳转的代码放在每个“字节码代码”段的末尾,并且我必须使边界大小至少与最大段的大小一样大.如果这甚至可能,我将如何告诉编译器/汇编器(gcc/g++/as)以所述方式对齐? 最佳答案 我意识到这并不是您所要求的,但这是使用GCC实现字节码解释器的标准方法。GCC的“compute

c++ - 尝试构建共享库 g++/mac 时 undefined symbol _main

我正在尝试在Mac上构建libdecodeqr。我的C++构建和链接历史都在Windows上,所以这是一个令人兴奋的发现之旅。我终于到了要创建链接库的地步。我正在运行的命令是:g++-shared-olibdecodeqr.so.0.9.3bitstream.ocodedata.ocontainer.oecidecoder.oformatinfo.ogalois.oimagereader.olibdecodeqr.o-L/opt/local/lib-archi386-lcxcore-lcv结果是:Undefinedsymbols:"_main",referencedfrom:start