Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
32 bit sürücü kaynak kodunuzu yeni veri türlerini kullanacak şekilde dönüştürdükten sonra, başlangıçta kaçırdığınız türle ilgili sorunları belirlemek için 64 bit derleyicisini kullanabilirsiniz. Bu kodu 64 bit Windows için ilk kez derlediğinizde, derleyici birçok işaretçi kesme veya tür uyuşmazlığı uyarısı oluşturabilir. Kodunuzu daha sağlam hale getirmek için bu uyarıları kılavuz olarak kullanın. Tüm uyarıları, özellikle işaretçi kesme uyarılarını ortadan kaldırmak iyi bir uygulamadır.
Aşağıda bu tür bir uyarı örneği verilmiştir:
warning C4311: 'type cast' : pointer truncation from 'unsigned char *' to 'unsigned long '
Örneğin, aşağıdaki kod C4311 uyarısını oluşturabilir:
buffer = (PUCHAR)srbControl;
(ULONG)buffer += srbControl->HeaderLength;
Kodu düzeltmek için aşağıdaki değişiklikleri yapın:
buffer = (PUCHAR)srbControl;
(ULONG_PTR)buffer += srbControl->HeaderLength;
Önceden tanımlanmış makrolar
Derleyici, platformu tanımlamak için aşağıdaki makroları tanımlar.
| Makro | Anlamı |
|---|---|
_WIN64 |
64-bitlik bir platform. |
_WIN32 |
32 bit platform. Bu değer, geriye dönük uyumluluk için 64 bit derleyici tarafından da tanımlanır. |
_WIN16 |
16 bit platform. |
Aşağıdaki makrolar mimariye özeldir.
| Makro | Anlamı |
|---|---|
_M_IA64 |
64 bit Intel platformu. |
_M_IX86 |
32 bit Intel platformu. |
Mimariye özgü kod dışında bu makroları kullanmayın. Bunun yerine mümkün olduğunca _WIN64, _WIN32 ve _WIN16 kullanın.
64 Bit derleyici anahtarları ve uyarıları
64 bit Windows'a taşımaya yardımcı olacak bir uyarı seçeneği vardır. -Wp64-W3 anahtarı aşağıdaki uyarıları etkinleştirir:
C4305: Kesme uyarısı. Örneğin, "return": "unsigned int64" değerinin "long" kadar kesilmesi.
C4311: Kesilme uyarısı. Örneğin, "tür dönüşümü": "int*_ptr64" işaretçisinin "int" olarak kısaltılması.
C4312: Daha büyük boyutlu uyarıya dönüştürme. Örneğin, "tür dönüştürme": "int" tipini daha büyük boyutlu "int*_ptr64" tipine dönüştürme.
C4318: Sıfır uzunluk geçirilmektedir. Örneğin, memset işlevine uzunluk olarak sıfır sabitini geçirme.
C4319: Değil operatörü. Örneğin, "~": "unsigned long" öğesini daha büyük boyuttaki "işaretsiz _int64" değerine genişleten sıfır.
C4313: Çakışan dönüştürme türü tanımlayıcıları ve bağımsız değişkenleriyle printf işlev ailesini çağırma. Örneğin, "printf": "%p" biçim dizesinde "_int64" türündeki ikinci bağımsız değişkenle çatışır. Bir diğer örnek ise printf("%x", pointer_value); bu durum üst 32 bitin kesilmesine neden olur. Doğru çağrı printf("%p", pointer_value).
C4244: Mevcut uyarı C4242 ile aynıdır. Örneğin, "return": "_int64" türünden "unsigned int" türüne dönüşüm, olası veri kaybı.