__declspec( selectany ) 含义

__declspec( selectany ) 含义

C/C++ 2007-12-30 14:22:31 阅读199 评论0   字号: 订阅

selectany使用在c/c++工程的连接期间,一般用得很少,所以很陌生,最近在MFC的源代码中发现,查一下MSDN,很难懂,看了很久才明白了一眯。这里翻译一下。

这个属性告诉编译器声明的全局变量是一个"任一拣选"(pick-any)COMDAT.在连接时间,如果多个COMDAT定义能看到,连接器选择一个并且丢弃所有的剩余的。如果连接器选项/OPT:REF被选择,COMDAT中所有的没有引用的数据项被删除。

一个全局数据在EXE或者DLL中只能被初始化一次。当同一个头文件被多个源文件引用时,在头中定义全局数据始始化时,这个属性被使用。这个属性在c和c++的编译器中都是可用的。


COMDAT record
一个常用对象文件格式(COFF)记录,它包含的已被初始化的常用块数据和打包的函数对连接器是可以见的。
packaged function
当函数级的连接功能选择开关被打开时,一个函数能被编译器创建。在编译器产生的对象文件中COMDAT记录的打包的函数对于连接器是可见的。没有打包的函数只在对象级(the object level)上连接。

下面是MSDN上一些例子:

//Correct - x1 is initialized and externally visible

__declspec(selectany) int x1=1;

//Incorrect - const is by default static in C++, so

//x2 is not visible externally (This is OK in C, since

//const is not by default static in C)

const __declspec(selectany) int x2 =2;

//Correct - x3 is extern const, so externally visible

extern const __declspec(selectany) int x3=3;

//Correct - x4 is extern const, so it is externally visible

extern const int x4;

const __declspec(selectany) int x4=4;

//Incorrect - __declspec(selectany) is applied to the uninitialized

//declaration of x5

extern __declspec(selectany) int x5;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值