以下预编译是什么意思
What does following precompilation mean?
最近遇到一个C++项目,经常看到以下预编译代码:
#ifdef _WIN32
#define __attribute__(x)
#endif
那么一般来说,它的用途是什么?
__attribute__
是一个特殊的关键字,例如GCC支持,用于指定对齐之类的内容。
给定的语句为__attribute__
添加一个空#define
,以便在定义_WIN32
时由预处理器删除它。例如,如果编译器不支持__attribute__
,这是必需的。
编辑
例如,宏可以具有以下形式:
#define DOUBLE(x) (x*2)
因此,如果你在源代码中编写DOUBLE(4)
,它将在传递给编译器之前被预处理器扩展/替换以(4*2)
。如果省略应扩展到的部分,则会将其扩展为空字符串。
我只是在@t.niese的第一个答案中添加一些背景知识
__attribute__
是GCC和其他一些编译器(clang,Intel(中的扩展。它执行的工作与#pragma
大致相同。但是,#pragma
确实有一个主要缺点:您不能在宏中使用它们,因为它们在宏之前被处理。
因此添加了__attribute__
,但是对于不支持它的编译器,您需要一种解决方法,如注释和答案中所述。
C99 和 C++11 添加了可在宏中使用的_Pragma
。我还没有看到它被大量使用。这有点可惜,因为它确实有望成为此问题的便携式解决方案。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思