使用宏

时间:2015-10-15 20:48:30

标签: c++ gcc macros nasm

  

编辑:哈哈,搜索条件很奇怪。我实际上不得不使用我得到的答案作为最终找到this question的搜索。本着StackOverflow的精神,我会投票决定关闭我的   将自己的问题视为重复而不是删除它,以防它作为登陆点   其他人。

我正在编写几个使用asm的函数,但我只希望它们在使用可以与NASM一起使用的编译器进行编译时才能运行。 (顺便说一下,我在C ++ 11上。)

我对asm的整个概念有点新意,但这是我认为我知道的:

  • GCC及其“亲戚”(MinGW,TDM-GCC)使用NASM,这就是我正在编写的功能。
  • 所有英特尔和AMD处理器理论上都可以理解NASM,无论操作系统如何,因为......
  • X86 / X64汇编程序由编译器实现的内容决定。

假设上面的内容是正确的,当我使用GCC(或类似)编译器或使用NASM的编译器时,我可以使用哪个宏来确保我正在编写的函数被定义?#ELSE将是函数的可用虚拟版本,以确保与其他编译器的一般兼容性。)

我所知道的这类宏只涉及确定操作系统(例如#IFDEF _WIN32),但在我使用Windows上的TDM-GCC或MinGW进行编译的情况下,该宏会被错误地使用

  

注意:如果有人想知道,有问题的功能基本上是   “有用但不重要”的实用功能。我们没有任何计划   用非GCC编译器编译,但它是开源代码,所以我们想要   要体谅他人。

1 个答案:

答案 0 :(得分:2)

您可以使用__GNUC__宏来识别GCC(以及一些主要兼容的编译器,如Clang和Intel的C ++编译器)。

MinGW(任何版本)可以检查__MINGW32__和/或__MINGW64__