如何在编译时检测我使用的是gcc还是icc?(我很困惑地发现icc定义了__GNUC__——甚至__GNUC_MINOR__和__GNUC_PATCHLEVEL__!为什么?) 最佳答案 我们使用#ifdef__INTEL_COMPILER将icc拆分,假设gcc作为默认值。 关于c++-在编译时检测ICC与GCC,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5736790/
如何在编译时检测我使用的是gcc还是icc?(我很困惑地发现icc定义了__GNUC__——甚至__GNUC_MINOR__和__GNUC_PATCHLEVEL__!为什么?) 最佳答案 我们使用#ifdef__INTEL_COMPILER将icc拆分,假设gcc作为默认值。 关于c++-在编译时检测ICC与GCC,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5736790/
例如,哪个gcc版本支持c99?是否有任何表格或图表显示gcc和g++的标准支持状态?gcc和g++是如何演变的?谢谢~ 最佳答案 非常严格地说,GCC从4.3开始只支持C89、C++98和C++03。到目前为止,对C99的支持仍然不完整,但GCC长期以来一直支持一个非常大且可用的子集。实验性的C++11支持从4.3开始,并且一直在改进;它在4.6.x中已经非常有用了,并且在4.7中添加了更多功能(虽然4.7.0有点不稳定)。还有一些C11支持,但C11的许多更改都需要一个适当的新C库,而这不是那么容易替换的。
例如,哪个gcc版本支持c99?是否有任何表格或图表显示gcc和g++的标准支持状态?gcc和g++是如何演变的?谢谢~ 最佳答案 非常严格地说,GCC从4.3开始只支持C89、C++98和C++03。到目前为止,对C99的支持仍然不完整,但GCC长期以来一直支持一个非常大且可用的子集。实验性的C++11支持从4.3开始,并且一直在改进;它在4.6.x中已经非常有用了,并且在4.7中添加了更多功能(虽然4.7.0有点不稳定)。还有一些C11支持,但C11的许多更改都需要一个适当的新C库,而这不是那么容易替换的。
intmain(){chara[7]="Network";return0;}C中的字符串文字在内部以nul字符终止。所以,上面的代码应该给出一个编译错误,因为字符串文字Network的实际长度是8并且它不能放入char[7]数组中。但是,Ubuntu上的gcc(即使使用-Wall)编译此代码时不会出现任何错误或警告。为什么gcc允许这样做而不将其标记为编译错误?gcc仅在char数组大小小于字符串文字时发出警告(仍然没有错误!)。例如,它会发出警告:chara[6]="Network";[相关]VisualC++2012给出chara[7]的编译错误:1>d:\main.cpp(3):
intmain(){chara[7]="Network";return0;}C中的字符串文字在内部以nul字符终止。所以,上面的代码应该给出一个编译错误,因为字符串文字Network的实际长度是8并且它不能放入char[7]数组中。但是,Ubuntu上的gcc(即使使用-Wall)编译此代码时不会出现任何错误或警告。为什么gcc允许这样做而不将其标记为编译错误?gcc仅在char数组大小小于字符串文字时发出警告(仍然没有错误!)。例如,它会发出警告:chara[6]="Network";[相关]VisualC++2012给出chara[7]的编译错误:1>d:\main.cpp(3):
我已经从gcc版本4.0.3移动到4.3.3并意识到-mfpmath在gcc4.3.3中默认设置为sse。这实际上导致了我的应用程序中的错误。在4.0.3中,-mfpmath为387。我想知道如何获得gcc为给定版本启用的所有默认选项。如何在编译时转储gcc使用的所有选项集。这使我能够比较4.0.3和4.3.3版本。一般来说,如果我能知道在gcc中进行版本更改之前需要检查的完整列表,那就太好了。(因为这会影响性能和功能。) 最佳答案 gcc-Q-v只需一个基本的小c或cpp文件作为输入文件。应该给你一个默认传递给gcc的所有选项的大
我已经从gcc版本4.0.3移动到4.3.3并意识到-mfpmath在gcc4.3.3中默认设置为sse。这实际上导致了我的应用程序中的错误。在4.0.3中,-mfpmath为387。我想知道如何获得gcc为给定版本启用的所有默认选项。如何在编译时转储gcc使用的所有选项集。这使我能够比较4.0.3和4.3.3版本。一般来说,如果我能知道在gcc中进行版本更改之前需要检查的完整列表,那就太好了。(因为这会影响性能和功能。) 最佳答案 gcc-Q-v只需一个基本的小c或cpp文件作为输入文件。应该给你一个默认传递给gcc的所有选项的大
我注意到,有时即使我不使用iostream和相关的I/O库,我的Mingw生成的二进制文件仍然大得不合理。比如我写了一段代码只使用vector和cstdio,用-O2-flto编译,我的程序就可以了大到2MB!我运行nmmain.exe>e.txt并震惊地看到所有与iostream相关的函数。经过一番谷歌搜索,我学会了使用-ffunction-sections-Wl,-gc-sections,将程序大小从2MB减少到~300KB(如果使用-s,100+KB)。太棒了!为了进一步测试-ffunction-sections-Wl,-gc-sections的效果,这里再写一段代码:#incl
我注意到,有时即使我不使用iostream和相关的I/O库,我的Mingw生成的二进制文件仍然大得不合理。比如我写了一段代码只使用vector和cstdio,用-O2-flto编译,我的程序就可以了大到2MB!我运行nmmain.exe>e.txt并震惊地看到所有与iostream相关的函数。经过一番谷歌搜索,我学会了使用-ffunction-sections-Wl,-gc-sections,将程序大小从2MB减少到~300KB(如果使用-s,100+KB)。太棒了!为了进一步测试-ffunction-sections-Wl,-gc-sections的效果,这里再写一段代码:#incl