makro <inttypes.h>
tanımlanan benzeri türde uint32_t
, uint16_t
değerlerini yazdırmak için en doğru yol, ve - - ama tek yol onlar değil. Şahsen, bu makroları hatırlamakta zorlandım ve kullanması zor buluyorum. (printf
biçimindeki dizgenin sözdizimi göz önüne alındığında, bu muhtemelen kaçınılmaz; daha iyi bir sistemle gelebileceğimi iddia etmiyorum.)
Değerler önceden tanımlanmış bir türe dökülmeli ve bu tip.
türleri int
ve unsigned int
geniş en az 16 bit olacak şekilde bir dil tarafından temin edilmektedir, ve bu yüzden, sırasıyla tip int16_t
veya uint16_t
herhangi dönüştürülen değeri tutmak için. Benzer şekilde, long
ve unsigned long
en az 32 bit genişliğinde ve long long
ve unsigned long long
en az 64 bit genişliğindedir.
Örneğin, ben (birkaç ek tweaks ile) böyle programınızı yazabiliriz:
Bu yaklaşımın
#include <stdio.h>
#include <stdint.h>
#include <netinet/in.h>
int main(void)
{
uint32_t a=12, a1;
uint16_t b=1, b1;
a1 = htonl(a);
printf("%lu---------%lu\n", (unsigned long)a, (unsigned long)a1);
b1 = htons(b);
printf("%u-----%u\n", (unsigned)b, (unsigned)b1);
return 0;
}
bir avantajı bile desteklemeyen öncesi C99 uygulamaları ile çalışabilir olmasıdır <inttypes.h>
. Böyle bir uygulama büyük olasılıkla <stdint.h>
'a sahip olmaz, ancak bu teknik diğer tam sayı tipleri için yararlıdır.
Sadece "gösteren hata" olduğunu söylemek yerine (kesin!) Hata iletisini bize göstermek çok daha yararlı olurdu. Ve sadece "istenen o/p vermektense" yerine, gerçek çıktıyı göster (ve "o/p" yazmak yerine "çıktı" sözcüğünü heceleyerek). –