首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预定义宏和C++11

预定义宏和C++11
EN

Stack Overflow用户
提问于 2015-11-08 13:57:57
回答 2查看 241关注 0票数 0

据我所知,预定义的宏和诸如#ifdef、#define...etc之类的操作与编译器有关,而不是语言标准。

我的问题是:

  1. 上面说的是真的吗?完全是真的?还有例外?
  2. 下面的代码完全是C++11的有效、标准和最佳实践吗? //有些代码包括这里#定义并发性int main(){ //一些代码这里#ifdef并发concurrency::parallel_for_each(begin(solutions),end(解决方案),&{ #else用于(自动和解决方案:解决方案){ #endif //这里的某些代码#ifdef并发});#&}endif}

编辑:有点超出了问题的范围:

上面的代码是提供一个选项来编译代码的最佳方式吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-08 14:04:28

你的代码是正确的。(就宏的使用而言,我并没有真正“解析”代码本身。)

C预处理器指令--过于简化,“以#something开头的东西”--在编译器真正“看到”代码之前就被处理了。(它们仍然是语言标准的一部分,即在与语言相同的文件中定义)。

只要您对C预处理器所做的任何操作都会产生有效的代码,编译器就会接受它。

有些事情确实会影响编译器。例如,#pragma引入了实现定义的功能.语言标准也涵盖了这一点。

至于“最佳实践”,#ifdef / #else / #endif并不是最干净的设计,但有时它是解决平台细节的最快方法。与C/C++中的所有东西一样(比如可怕的宏),--只要您不过度使用它--。将其放在某个中心位置(而不是将其散布到您的代码库中),并将其记录下来,以便您后面的人员能够理解您的#ifdef,并可能用更好的解决方案来替换它们。

票数 3
EN

Stack Overflow用户

发布于 2015-11-08 14:18:20

  1. 以下预处理指令
代码语言:javascript
复制
- `#include`
- `#define`
- `#undef`
- `#if`
- `#ifdef`
- `#ifndef`
- `#error`

在C/C++中具有标准行为。

#pragma指令类似于一个异常,因为它是由编译器或其他外部内容来解释的。

  1. 您的代码在C++11中是有效和标准的,但不遵循最佳实践。不鼓励使用预处理器指令。目前开发C++语言的努力是为了完全消除预处理的需求。相反,您可以使用其他静态代码生成技术,如模板元编程。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33594742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档