预定义宏和 C++11
Predefined macros and C++11
据我所知,预定义宏和操作(如#ifdef、#define...等)与编译器相关,与语言标准无关。
我的问题是:
- 以上是真的吗?完全正确?和例外?
下面的代码是否完全符合 C++11 有效、标准和最佳实践?
//Some includes here
#define CONCURRENCY
int main(){
//some code here
#ifdef CONCURRENCY
concurrency::parallel_for_each(begin(solutions), end(solutions), [&](schedule_& solution){
#else
for (auto& solution:solutions){
#endif
//Some code here
#ifdef CONCURRENCY
});
#else
}
#endif
}
编辑:
有点超出问题范围:
上面的代码是提供使用和不使用并发选项编译代码的最佳方式吗?
您的代码是正确的。 (就宏的使用而言,我并没有真正"parse"代码本身。)
C 预处理器指令——过度简化,"the stuff that starts with #something
"——在编译器实际获取"see"代码之前进行处理。 (它们仍然是语言标准的一部分,即与该语言在同一篇论文中定义。)
只要您使用 C 预处理器产生有效代码,编译器就会接受它。
有些事情会影响编译器。例如,#pragma
引入了 实现定义的 功能。这也包含在语言标准中。
至于"best practice",#ifdef
/ #else
/ #endif
并不是最简洁的设计,但有时它是解决平台问题的最快方法。与 C/C++ 中的基本所有内容(如可怕的宏)一样,只要你不过分就没关系。将它放在某个中心位置(而不是让它散布在你的代码库中),并对其进行记录,以便跟随你的人可以理解你的 #ifdef
,并可能用更好的替换它们解决方案。
以下预处理器指令
#include
#define
#undef
#if
#ifdef
#ifndef
#error
在 C/C++ 中具有标准行为。
#pragma
指令就像一个异常,因为它是由编译器或其他外部东西解释的。
您的代码在 C++11 中有效且符合标准,但未遵循最佳实践。不鼓励使用预处理器指令。当前 C++ 语言的开发努力旨在完全消除预处理器的需要。相反,您可以使用其他静态代码生成技术,如模板元编程。
据我所知,预定义宏和操作(如#ifdef、#define...等)与编译器相关,与语言标准无关。
我的问题是:
- 以上是真的吗?完全正确?和例外?
下面的代码是否完全符合 C++11 有效、标准和最佳实践?
//Some includes here #define CONCURRENCY int main(){ //some code here #ifdef CONCURRENCY concurrency::parallel_for_each(begin(solutions), end(solutions), [&](schedule_& solution){ #else for (auto& solution:solutions){ #endif //Some code here #ifdef CONCURRENCY }); #else } #endif }
编辑: 有点超出问题范围:
上面的代码是提供使用和不使用并发选项编译代码的最佳方式吗?
您的代码是正确的。 (就宏的使用而言,我并没有真正"parse"代码本身。)
C 预处理器指令——过度简化,"the stuff that starts with #something
"——在编译器实际获取"see"代码之前进行处理。 (它们仍然是语言标准的一部分,即与该语言在同一篇论文中定义。)
只要您使用 C 预处理器产生有效代码,编译器就会接受它。
有些事情会影响编译器。例如,#pragma
引入了 实现定义的 功能。这也包含在语言标准中。
至于"best practice",#ifdef
/ #else
/ #endif
并不是最简洁的设计,但有时它是解决平台问题的最快方法。与 C/C++ 中的基本所有内容(如可怕的宏)一样,只要你不过分就没关系。将它放在某个中心位置(而不是让它散布在你的代码库中),并对其进行记录,以便跟随你的人可以理解你的 #ifdef
,并可能用更好的替换它们解决方案。
以下预处理器指令
#include
#define
#undef
#if
#ifdef
#ifndef
#error
在 C/C++ 中具有标准行为。
#pragma
指令就像一个异常,因为它是由编译器或其他外部东西解释的。您的代码在 C++11 中有效且符合标准,但未遵循最佳实践。不鼓励使用预处理器指令。当前 C++ 语言的开发努力旨在完全消除预处理器的需要。相反,您可以使用其他静态代码生成技术,如模板元编程。