我有一个类包含:
class SomeClass {
SomeClass *previous;
static __declspec(thread) SomeClass *stackTop;
public:
SomeClass() : previous(stackTop) { stackTop = this; }
~SomeClass() { stackTop = previous; }
};
__declspec(thread) SomeClass *SomeClass::stackTop = NULL;
这对 Win32
目标编译良好,但是当为 Pocket PC 2003 (ARMV4)
编译时失败并出现错误 C2485:
error C2485: '$I' : unrecognized extended attribute
我在SomeClass
构造函数和析构函数中设置成员的两个地方以及我实例化SomeClass
的所有地方(它被实例化为自动变量,需要知道堆栈上层的下一个实例所在的位置)。
不幸的是,该错误在 MSDN 中没有有意义的文档,__declspec(thread)
的文档也没有指出它在任何情况下都不会起作用。我确实检查过 thread
没有在预处理器中定义。
我不相信那个版本的 Pocket PC (Windows CE) 支持 __declspec(thread)
属性 (TLS)。它可以解释为什么只有在为 Pocket PC 而不是为 Win32 编译时才会出现这种情况。请参阅以下链接:
我是一名优秀的程序员,十分优秀!