C++的各种宏和属性

  • 总结中;
  • 宏;
  • progma;
  • __cpluscplus;
  • __attribute__;

宏名称 含义
_GLIBCXX17_DEPRECATED 这个东西即将被删除,不推荐使用
_GLIBCXX_GTHREAD_USE_WEAK 对于MINGW320,否则为1 不知道
_GLIBCXX_HAS_GTHREADS 如果可用则为1 表示当前gthread库是否可用
_GLIBCXX_HIDE_EXPORTS gthr.h中,如果没有定义这个宏,就会执行#pragma GCC visibility pop
_GLIBCXX_VISIBILITY __attribute__ ((__visibility__ (#V))) 改变可见性
_GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY 如果可以设置可见性,就有定义 决定_GLIBCXX_VISIBILITY是否起作用

pragma

常常见到#pragma xxx yyy的用法,总结如下:

system_header

1
#pragma GCC system_header

像对待系统库那样对待这个文件(也就是这个文件可能不符合标准,但是不要警告).

visibility

指定目标文件外部链接实体的可见性.

1
#pragma GCC visibility push (value)

value可以为以下值

default
实体在共享库中可见,并且可以被抢占.
protected
Indicates that the affected external linkage entities have the protected visibility attribute. These entities are exported in shared libraries, but they cannot be preempted.
hidden
Indicates that the affected external linkage entities have the hidden visibility attribute. These entities are not exported in shared libraries, but their addresses can be referenced indirectly through pointers.
internal
Indicates that the affected external linkage entities have the internal visibility attribute. These entities are not exported in shared libraries, and their addresses are not available to other modules.

可以通过以上指令来指定实体的可见性,如果在没有push的情况下使用pop,编译器将会警告.

__cplusplus

__cpluscplus表示当前的c++标准,主要有这几个值

标准
199711L c++98
201103L c++11
201402L c++14
201703L c++17
202002L c++20
202100L c++23(不完整)

__attribute__

这个常常这样写

1
__attribute__ ((值))

用来提醒编译器,这个函数或数据有一些特殊属性.我整理的如下:

作用
packed 取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐.
aligned(n) 指定内存对齐n字节
noreturn 告诉编译器这个函数没有返回值,以便编译器优化
weak 弱符号
__visibility__ (V)) 可见性,V参考上文

C++的各种宏和属性
https://zzidun.tech/3b391a6f/
作者
zzidun pavo
发布于
2022年2月1日
许可协议