【发布时间】:2018-12-16 11:02:53
【问题描述】:
存在多种用于 C 和 C++ 的编译器,其中一些用于为微控制器编译程序。有没有办法限制我们的程序只能在特定的编译器中编译?我猜想一定有办法使用预处理器指令来做到这一点。
【问题讨论】:
-
您是否有兴趣确定特定的标准支持,或者特定的编译器制造商?这是后者的示例:coliru.stacked-crooked.com/a/1d77407c352fe882
-
大多数编译器(或其预处理器)定义了它们独有的宏。例如,如果编译为 C,gnu 编译器定义
__GNUC__,如果编译为 C++,则定义__GNUG__,这些宏扩展为与编译器版本号相关的值。要查找为特定编译器定义的宏以及它们扩展的内容,您需要阅读每个编译器的文档。 -
VS 有
_MSC_VER,clang 有__clang__,有__APPLE__用于macOS,__x86_64__和__i386__用于GCC 的32 位和64 位英特尔处理器,__INTEL_COMPILER用于icpc,_WIN32适用于 Windows(我认为)... -
@Peter:没有编译器可以确保它定义的宏对它们来说是唯一的。 Clang-902.0.39.2 将
__GNUC__定义为 4。
标签: c++ c compilation