我有使用public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) {
@SuppressWarnings("unchecked")
T result = (T)e.value;
return result;
}
}
return setInitialValue();
}
的C ++项目。我的问题是我不知道如何检查DWORD
是否为标准Windows DWORD
类型 - 或者用户已将其手动定义为其他内容 - 例如DWORD
。
我该怎么检查?
问题出在目标机器上我有兴趣检查它我无法运行Visual Studio。我只能运行一些.exe文件。
在我的机器上,当我使用“转到定义”时,它显示为int
。
如何解决这个问题呢?并检查这个DWORD引用的目标机器上的哪种类型?
更新:在某些机器上编译项目时,似乎重要的是定义了哪种类型的DWORD - 我无法访问该机器,我只有项目源,这可能没有改变。
答案 0 :(得分:3)
#define
DWORD
unsigned long
是weather.0001_initial
编译器在创建二进制可执行文件时检查的内容。
在运行它的每台机器上,此二进制文件都是相同的。如果编译器在必须为DWORD保留空间时决定需要分配4,8或100个字节,它将在它运行的每台PC上分配相同数量的字节。
答案 1 :(得分:3)
这个问题起初似乎很愚蠢,但它有一些有趣的代码。 许多开发人员从托管世界进入本地和类似的东西,这对于不同的处理器/操作系统和#34;乍一看并不清楚。
因此,如果您要发送可执行文件,那么这并不重要。在编译代码之后,代码转换为不可变的机器语言,DWORD
保持在编译时定义。如果它是unsigned long
,它就会在每台可以运行可执行文件的机器上保持不变。
但如果我们将图书馆送出来会怎样?突然事情做重要!在这种情况下(不属于你)你可以使用std::is_same
:
static_assert(std::is_same<DWORD,unsigned long>::value,"DWORD is not unsigned long, fail to compile");
修改强>
添加我在项目源代码中编写的代码行并尝试编译它。如果它编译 - 它可能(只是可能)意味着没有一种类型 - 将其定义为其他人。