2010-11-22 23 views
3

64 bit mimarilerde, long int, gcc'ye göre en az int64_t. 32-bitte, long int en az int32_t'dur. Microsoft derleyicileriyle, long, 32/64-bit'e bakılmaksızın her zaman bir int32_t'dur. Herhangi bir yolu var:gcc, farklı mimariler üzerinde uzun int genişliği

  1. 32 gb'de int64_t olarak davranmak için gcc'yi zorla? (test kolaylığı için)
  2. Gcc 64bit'de int32_t olarak uzun süre tedavi etmek için zorlayın. (MS'in derleyicisiyle uyumluluk için).

cevap

11

üzerinde derleme yaparken Gerçekten size sorunsuz bir çok kazandıracak - Standart türlerini kullanmak böyle ziyade <stdint.h> den vb int32_t, uint32_t, int64_t, uint64_t olarak long int gibi çıplak türlerle ilgili varsayımlar yapmaya veya derleyiciyi isteğinize göre bükmeye çalışmaktansa.

Not: Herhangi bir platform için 64 bit model (örneğin * nix platformları için LP64, Mac OS X, vb.) Verilir, bu yüzden derleyiciyi farklı bir 64 bit model kullanmaya ikna etseniz bile Muhtemelen sistem kodları, kütüphaneler vb. herhangi bir çağrıyı kesersiniz.

+0

Görüşüm Goz'un cevabına bakın. –

0

Bu nedenle, platform başına tanımlanmış bir dizi yazım hatası kullanmanın genellikle daha kolay olmasının nedeni budur. Bunu yapma rastgele platform-ile-rastgele-derleyici-47.4

+0

Tüm projelerimde boost'un cstdintini kullanıyorum. Ekibimin diğer üyelerini veya kütüphane yazarlarını aynı şeyi yapmaya zorlayamam. Derleyici düzeyinde zorlamak (eğer mümkünse) daha güvenli görünüyor. –

+0

@John: Ekip üyeleriniz kırılgan/güvensiz/taşınabilir olmayan bir kod yazıyorsa, onları ve/veya kodlarını düzeltmeniz gerekir. –

+0

@ M.M 'stdint.h' her zaman standart C'de bulunmamıştır. C99'da tanıtılmıştır. – Kaz

İlgili konular