草庐IT

c++ - Gcc 预处理器和粘贴

前几天我在stackoverflow上发现了这个片段(感谢):#definePLATFORM3#definePASTER(x,y)x##_##y#defineEVALUATOR(x,y)PASTER(x,y)#definePLATFORMSPECIFIC(fun)EVALUATOR(fun,PLATFORM)externvoidPLATFORMSPECIFIC(somefunc)(char*x);用gcc-E编译,结果是:#1"xx.c"#1""#1""#1"xx.c"externvoidsomefunc_3(char*x);但是:#definePLATFORMlinux#define

【macOS-OpenCV报错】ld: warning:ignoring file found architecture ‘x86_64‘, required architecture ‘arm64

如果之前用的mac是英特尔intel芯片的,然后换了macM1或M2芯片的。在使用OpenCV时会报错ld:warning:ignoringfile'/usr/local/Cellar/opencv/4.7.0_7/lib/libopencv_gapi.4.7.0.dylib':foundarchitecture'x86_64',requiredarchitecture'arm64'ld:warning:ignoringfile'/usr/local/Cellar/opencv/4.7.0_7/lib/libopencv_bgsegm.4.7.0.dylib':foundarchitectur

x86 和 x64 arm的区别

x86和x64是基于英特尔x86架构的复杂指令集架构(ISA),而ARM是一种精简指令集架构。什么是指令集架构假设我们现在要开发一个cpu,就好比说我们去修建一栋楼,开发商会先将图纸设计好。设计好之后由施工单位按照设计图去建造。在建造的这个过程中,施工方是要按照国家一定的规范来设计的,比如每层楼的高度,窗户的大小,排水管大小以及消防通道的设置等,这个设计规范对于这栋楼(CPU)来说就是指令集架构。指令集架构就是机器的语言,包含了各种各样的指令,像我们常见的x86个arm就是两个不同的指令集架构。像是Intel(英特尔)和amd都是采用x86指令级架构,而手机平板等才用的大多就是ARM指令集架构

c++ - 我不能再将 char[M][N] 类型分配给 gcc 4.9 上的 std::vector

在升级Ubuntu之前我一直使用gcc4.8,现在我有gcc-4.9.1-16。过去可以在没有警告的情况下编译并运行良好的代码现在不再可以编译。staticconstunsignedWIDTH=16;staticconstunsignedVSCALE=1;staticconstunsignedHEIGHT=WIDTH/VSCALE;staticconstunsignedFOOTER=2;typedefcharRow[WIDTH+1];typedefRowWorld[HEIGHT-FOOTER];std::vectorm_levels;Worldlevels[]={{"","","","

c++ - gcc 中的 Borland 风格 __closure

我是使用gnuC++编程的新手。我有一个我认为可以转换为跨平台的应用程序,大约两个月前我开始使用C::B。我有很多问题,但我解决了它们,将原始代码保留在对象类或结构的#ifdefBCB...#else...#endifblock中。我无法解决以下问题,因为它非常复杂。函数声明自1997/1998年以来一直有效,应用程序的每个点都是依赖于这些定义和实现开发的。它们用于对象间、进程间和网络通信以及所有交互事件系统。只要我们的JetRtl.dll准备好服务并且调用者知道参数的数量,任何地方的任何函数都可以使用任意数量(最多50个)的参数直接调用,或通过流连接调用。我解释了这么久,因为据我所知

c++ - GCC 4.9 和 clang 3.5 中的 std::rbegin 和 std::rend 函数

我一直在MSVC2013中使用std::rbegin和std::rend。当我尝试使用GCC4.9.1或clang3.5.0编译我的代码时,两者都告诉我“rbegin”和“rend”是不是命名空间“std”的一部分。请参阅下面的代码示例。我是在做错什么,还是只是尚未在GCC和clang中实现?//test.cpp#include#include#includeintmain(int,char**){std::vectortest={1,2,3,4,5};for(autoit=std::rbegin(test);it!=std::rend(test);++it){std::cout海湾合

c++ - std::chrono::duration_cast - GCC 实现有问题吗?

我想我在std::chrono::duration_cast的GCC实现中发现了一个错误。谁能证实我这一点?测试代码:usingTicks=std::chrono::duration>>;usingdur=typenamestd::chrono::system_clock::duration;intmain(){std::chrono::time_pointearliest{std::chrono::duration_cast(std::chrono::time_point::max().time_since_epoch())};autoticks=std::chrono::time_

c++ - 作为模板非类型参数的 C 字符串适用于 gcc 6.3,但不适用于 Visual Studio 2017(19.16.27027.1 for x64)

以下代码:#includetemplatevoidf(){std::cout();//Microsoft(R)C/C++OptimizingCompilerVersion19.16.27027.1forx64//Copyright(C)MicrosoftCorporation.Allrightsreserved.////string-as-template-parameter.cpp//string-as-template-parameter.cpp(10):fatalerrorC1001:Aninternalerrorhasoccurredinthecompiler.//(compi

c++ - 为什么 GCC 在 Clang 不使用它的地方插入 mfence?

为什么GCC和Clang会为此代码(x86_64,-O3-std=c++17)生成如此不同的asm?#includeintglobal_var=0;intfoo_seq_cst(inta){std::atomicia;ia.store(global_var+a,std::memory_order_seq_cst);returnia.load(std::memory_order_seq_cst);}intfoo_relaxed(inta){std::atomicia;ia.store(global_var+a,std::memory_order_relaxed);returnia.loa

c++ - gcc和g++之间-Wconversion的区别

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:CanImakeGCCwarnonpassingtoo-widetypestofunctions?考虑以下测试程序:staticvoidfunc(inta){}intmain(){unsignedintb=42;func(b);return0;}用gcc编译:lol@mac:~/projects$gcc-Wconversiontestit.ctestit.c:Infunctionâmainâ:testit.c:11:warning:passingargument1ofâfuncâassignedduetopr