Gereken tek şey, biçim belirleyicilerinin ve türlerin aynı fikirde olması ve bunu doğru yapmak için her zaman dönüştürme yapabilmenizdir. longen az 32 bittir, bu nedenle ile %lubirlikte (unsigned long)kher zaman doğrudur:
uint32_t k;
printf("%lu\n", (unsigned long)k);
size_tdaha karmaşıktır, bu yüzden %zuC99'a eklenmiştir. Bunu kullanamıyorsanız, o zaman ona aynı şekilde davranın k( longC89'daki en büyük türdür, size_tdaha büyük olması pek olası değildir).
size_t sz;
printf("%zu\n", sz); /* C99 version */
printf("%lu\n", (unsigned long)sz); /* common C89 version */
Biçim tanımlayıcılarını ilettiğiniz tür için doğru alamazsanız printf, diziden çok fazla veya çok az bellek okumakla eşdeğerdir. Türleri eşleştirmek için açık yayınlar kullandığınız sürece, taşınabilir.
uint32_tgelen<stdint.h>veya<inttypes.h>; Bu türleri kullanmak istiyorsanız, C89'a yükseltmelisiniz. Bir uzantı olarak, GCC'nin bunları kullanmanıza izin vermesi muhtemeldir, ancak C89'un böyle bir desteği yoktu.