9.7. inttypes.h
: Tamsayı Tipleri İçin Biçim Dönüşümü
Bu başlık dosyası stdint.h
başlık dosyasını içerir ve ona bazı eklemeler yapar. stdint.h
başlık dosyası, uygulanan en geniş tamsayı türlerini temsil eden
intmax_t
ve uintmax_t
türleri dahil olmak üzere,
belirtilen bit genişliklerine sahip tamsayı türlerini tanımlar.
Aşağıdakine benzer bir yapı tipi tanımlanır:
typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
Bu dosyada tanımlanan
imaxdiv
fonksiyonu, intmax_t
tipinden iki sayıyı
birbirine böler ve bölümü ile kalanı imaxdiv_t
tipindeki
bir yapıda depolar. imaxdiv
’e ek olarak, bu başlık dosyası,
intmax_t
tipinde bir tamsayının mutlak değerini döndüren
imaxabs
fonksiyonunu ve karakter dizilerini
intmax_t
veya uintmax_t
tipindeki tamsayılara
dönüştürmek için dört fonksiyon daha bildirir:
intmax_t imaxabs(intmax_t j) imaxdiv_t imaxdiv(intmax_t pay, intmax_t payda) intmax_t strtoimax(const char * sayig, char ** song, int taban) uintmax_t strtoumax(const char * sayig, char ** song, int taban) intmax_t wcstoimax(const wchar_t * sayig, wchar_t ** song, int taban) uintmax_t wcstoumax(const wchar_t * sayig, wchar_t ** song, int taban)
Bu dosya, ayrıca, printf
ve scanf
ailesi fonksiyonlarında
dönüşüm tanımlaması olarak kullanılabilecek bazı karakter değişmezi makroları
tanımlar. printf
fonksiyonu dönüşüm tanımlaması makrolarının
adları PRI
önekiyle başlar, ardından bir dönüşüm belirteci
(d
, i
, o
, x
veya
X
) ve bir tip adını ifade eden bir büyük harf dizisi gelir.
Tip adları, stdint.h
başlık dosyasında tanımlanmıştır.
Örneğin, dönüşüm belirteci d
olan makro adları şöyledir:
PRIdN PRIdLEASTN PRIdFASTN PRIdMAX PRIdPTR
Burada listelenen ilk üç makro adının sonundaki
N
harfi, belirli bir tipin bit genişliğini gösteren
ondalık sayı için bir yer tutucudur. Yaygın olarak uygulanan değerler
8
, 16
, 32
ve 64
’tür.
Diğer PRI
… makro adları, yukarıda verilen
d
tek karakteri yerine i
, o
,
u
, x
veya X
kullanırlar.
scanf
fonksiyon ailesi tarafından kullanılan makrolarda
PRI
öneki yerine SCN
öneki ile başlarlar:
SCNdN SCNdLEASTN SCNdFASTN SCNdMAX SCNdPTR
Diğer PRI
… makro adları, yukarıda verilen
d
tek karakteri yerine i
, o
,
u
veya x
kullanırlar.
Örnek olarak aşağıdaki programa bakalım:
#include <inttypes.h> #include <stdio.h> int main (void) { float f; printf("En buyuk isaretsiz tamsayi: %" PRIuMAX "\n", UINTMAX_MAX); printf("f'nin adresi: %" PRIxPTR "\n", (uintptr_t)&f); printf("f'nin adresi: %p\n", (void *)&f); }
Burada, ilk satırda işaretsiz en büyük tamsayının değeri
bastırılır. İkinci satırda uygun bir onaltılı sayı dönüşüm tanımlaması
kulllanılarak f
değişkeninin adresi bastırılır.
Üçüncü satırda zaten bildiğimiz bir dönüşüm tanımlaması kullanılmıştır.
Buradaki PRI
… makrolarının karşılığı bir karakter dizisi
değişmezidir. Önişlemcinin arka arkaya yazılan ve aralarında, boşluk dışında,
herhangi bir işaret olmayan karakter dizilerini birleştirip tek bir karakter
dizisi değişmezine dönüştürdüğünü unutmayın.