我的程序使用的是哪个c++编译器
Which C++ compiler is my program using?
我在cpp编程方面不是很精通,而在庞大的编程世界中,我只是一个初学者,因为现在我们只是安装任何IDE并在其中开始我们的程序。我开始使用CodeBlocks IDE,但只是出于好奇想知道我的程序使用哪个编译器,因为它可以是4.3.2或4.0.8或其他东西
我试着阅读Build日志,它不在那里,一个小谷歌也没有帮助。
是否有任何简单的命令,我可以在我的cpp程序中运行并检查我的IDE正在使用哪个编译器?
可以使用宏
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
见http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html
其他编译器提供它们自己的宏,例如微软的_MSC_VER
这里有一个非常全面的列表,涵盖了几十个编译器:http://predef.sourceforge.net/precomp.html和http://sourceforge.net/apps/mediawiki/predef/index.php?title=Compilers
根据Codeblocks FAQ:
事实上,很大程度上取决于所使用的编译器插件。一些默认的Code::Blocks安装提供了GNU GCC (MinGW/Cygwin), MS Visual c++ Free Toolkit 2003, Borland's c++ Compiler 5.5, DigitalMars Free Compiler。, OpenWatcom, Small Device C Compiler (SDCC)等。
Code::Blocks是一个非常通用的IDE,可以使用许多编译器。你甚至可以为每个项目使用不同的编译器。
根据你安装的版本(我有2009年11月11日的版本,在Windows下运行),当你有一个项目加载时,你可以去"项目菜单"->"构建选项"项,你会看到你正在为那个项目使用什么编译器-记住它。关闭该窗口,然后转到"设置"菜单->"编译器和调试器…"项。在弹出的窗口中,请确保从左侧列表中选择了"全局编译器设置"图标。切换到"工具链可执行文件"页面,你可以通过确保屏幕顶部的"选定的编译器"下拉框与你的项目匹配,从这里得到你的项目正在使用的编译器可执行文件的确切路径。
获取该信息的另一种方法是构建您的项目,然后切换到"构建日志"。命令行至少应该有编译器可执行文件作为它显示的文件名的一部分。
从编译器的文件名中,您可以确定它是某种GCC衍生版本还是其他版本(例如MSVC)。在这一点上,它变得特定于编译器,以找出您正在使用的版本。例如,如果是GCC或一个端口,那么您可以运行:
<path and filename of compiler> --version
从命令提示符/shell获取版本号。
如果是MSVC,那么只需运行:
<path and filename of compiler>
将显示版本号。
如果你想从你的编译器(虽然从技术上讲,它将是预处理器),你需要知道上面的信息来知道你的编译器是什么,因为你需要知道要检查的预处理器宏,这些宏是编译器依赖的。
好的一面是,Code::Blocks很可能使用GCC,除非你已经在Windows上下载了没有MinGW的版本。所以你可能可以使用Ben Voigt描述的方法。
编辑:缺少换行符隐藏编译器版本命令行
可能不是,编程环境(给出OS/sdk的版本等)定义了各种宏,但这些宏通常是由include文件而不是编译器设置的。
编译器可能会定义它自己的符号,但你必须检查编译器文档。
您可以检查路径并尝试运行带有"-v"或"/?"标志的编译器(通常是cc或cl),以查看它报告的内容
- C/C++编译器通常会删除重复的库吗
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 在线编译器中的分段C++没有打印消息
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 我需要知道编译器如何在cpp中使用析构函数
- 编译器如何区分std::vector的构造函数
- CLANG 编译器 说:变量"PTR"可能未初始化
- 告诉c++编译器该参数没有别名
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 为什么所有C++编译器都会崩溃或挂起此代码
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 为什么C++编译器没有检测到正确声明的类?