我用64位编译了Qt。我的代码也是用64位编译的。我将(指针)成员变量初始化为零。当我检查它时,XCode告诉我它的值不是0而是0xffffffff00000000。
这是32到64之间混淆的标志吗?当库和我的代码都有'g ++ .. -arch x86_64 -Xarch_x86_64 ..'时,32位初始化如何进入可执行文件?万一重要的是,我在Snow Leopard上。
----开始,编辑----
我很欣赏在这些年之后发现,当一个指针为指针分配0时,标准不会强加值0x00..00,但在这种情况下这不是问题。
#include <stdio.h>
int main()
{
const char * c = "Foo";
printf("Pointers in this executable use %lu bytes.\n", sizeof(c));
void * z = 0;
printf("A zero pointer in this executable is %p\n", z);
}
如果我将上面的代码保存在'32_or_64.cpp'中,然后用'g ++ -arch i386 32_or_64.cpp'编译它,我得到
此可执行文件中的指针使用4个字节。 此可执行文件中的零指针是0x0
如果我用'g ++ -arch x86_64 32_or_64.cpp'编译它,我得到
此可执行文件中的指针使用8个字节。 此可执行文件中的零指针是0x0
如果您认为这不能确定我的特定配置上的0不应该让我在x86_64中调试时看到正好0,请指出它。否则,辩论'null'是一个很好的讨论,但在这个线程中是一个无关紧要的讨论。
----结束,编辑----