定义命名空间的变体和__visibility__的含义
Variant of defining a namespace and the meaning of __visibility__
今天,当我看到<iostream>
(g++4.4.1)的预处理代码时,我看到了一行在语法上很不寻常的代码。
namespace std __attribute__ ((__visibility__ ("default"))) {
// ...
}
我对这一行有疑问:
- 什么是
__attribute__
,它是什么std
之后做什么?(新语法!) - 双大括号是如何使用
(( ... ))
的?它是一种新语法吗 - 什么是
__visibility__
,什么是它设置为"default"
__attribute__
是一个特定于gcc的语言扩展。它允许您以标准C++语言不直接支持的方式更改函数、命名空间或其他实体的声明。
C++0x添加了对属性的语言支持,尽管语法不同,而且大多数属性仍然是特定于实现的。
这是新版本的gcc使用的编译器特定功能,用于控制从共享对象导出哪些符号。看见http://gcc.gnu.org/wiki/Visibility详细信息。
__attribute__
的双parens语法是让您在非GCC编译器上去掉#define
:
#ifndef __GNUC__
#define __attribute__(x)
#endif
双parens允许里面的东西变得复杂(例如,逗号分隔的属性序列),并且仍然可以被简单的宏拾取。
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级
- 如何使用 soong 命名空间来有条件地编译模块
- 使用 Clang++ 有没有办法将文件作为命名空间等包含?
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何通过命名空间调用非静态方法
- 在命名空间名称之前加上 :: 是什么意思?