Я скомпилировал Qt в 64 бит. Мой код также скомпилирован в 64 бит. Я инициализирую переменную-член (указатель) в ноль. Когда я проверяю его, XCode сообщает, что его значение не 0, а 0xffffffff00000000.
Является ли это признаком смешения между 32 и 64? Как могла 32-битная инициализация проникнуть в исполняемый файл, когда и библиотека, и мой код имеют 'g ++ .. -arch x86_64 -Xarch_x86_64 ..'? Если это важно, я на снежном барсе.
---- Begin-Edit ----
Я ценю, что после всех этих лет выяснилось, что стандарт не устанавливает значение 0x00..00, когда указатель присваивается 0, но в данном случае это не проблема.
#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', я получу
Pointers in this executable use 4 bytes.
A zero pointer in this executable is 0x0
Если я скомпилирую его с помощью 'g ++ -arch x86_64 32_or_64.cpp', я получу
Pointers in this executable use 8 bytes.
A zero pointer in this executable is 0x0
Если вы считаете, что это не устанавливает, что 0 в моей конкретной конфигурации не должен позволять мне видеть точно 0 при отладке в x86_64, укажите это. Иначе обсуждение «ноль» - это замечательное обсуждение, но неуместное в этой теме.
---- End-Edit ----