据我所知,预定义的宏和诸如#ifdef、#define...etc之类的操作与编译器有关,而不是语言标准。
我的问题是:
编辑:有点超出了问题的范围:
上面的代码是提供一个选项来编译代码的最佳方式吗?
发布于 2015-11-08 14:04:28
你的代码是正确的。(就宏的使用而言,我并没有真正“解析”代码本身。)
C预处理器指令--过于简化,“以#something开头的东西”--在编译器真正“看到”代码之前就被处理了。(它们仍然是语言标准的一部分,即在与语言相同的文件中定义)。
只要您对C预处理器所做的任何操作都会产生有效的代码,编译器就会接受它。
有些事情确实会影响编译器。例如,#pragma引入了实现定义的功能.语言标准也涵盖了这一点。
至于“最佳实践”,#ifdef / #else / #endif并不是最干净的设计,但有时它是解决平台细节的最快方法。与C/C++中的所有东西一样(比如可怕的宏),--只要您不过度使用它--。将其放在某个中心位置(而不是将其散布到您的代码库中),并将其记录下来,以便您后面的人员能够理解您的#ifdef,并可能用更好的解决方案来替换它们。
发布于 2015-11-08 14:18:20
- `#include`
- `#define`
- `#undef`
- `#if`
- `#ifdef`
- `#ifndef`
- `#error`在C/C++中具有标准行为。
#pragma指令类似于一个异常,因为它是由编译器或其他外部内容来解释的。
https://stackoverflow.com/questions/33594742
复制相似问题