Standart C Programlama Dili


8.5. Standart Başlık Dosyaları

C Standardı, değişmez, makro ve tip tanımlayan; değişken bildiren ve tüm standart kütüphane fonksiyonlarının prototiplerini içeren 15 tane başlık dosyası tanımlar. Standart bir C fonksiyonunu çağırmadan önce ilgili başlık dosyası #include emri ile programa dahil edilmelidir. Bazı gerçekleştirmelerde, bazı “fonksiyonlar” önişlemci makroları şeklinde tanımlanmışlardır. Kullanıcı açısından bir fonksiyonun gerçekten fonksiyon şeklinde mi yoksa makro şeklinde mi tanımlanmış olduğu, bir istisna dışında, farketmez: Makro argümanları, parametre makro içinde kaç defa kullanılırsa, o kadar kere hesaplanırlar. Eğer argümanlarda yan etkili işleç veya fonksiyonlar kullanılırsa, bu sorun yaratabilir. Örneğin, bazı uygulamalarda tolower ve toupper makro şeklinde ctype.h içinde tanımlanırken, stdlib.h içinde ilgili fonksiyonların bildirimi yapılmaktadır. Eğer yan etkisi olmayan işleçler içeren argümanlar verecekseniz, daha hızlı olacağı için, makroları kullanmak daha akılcıdır; ancak argümanlar olası yan etkileri olan karmaşık ifadeler ise, argümanların bir defa hesaplanacakları ilgili fonksiyonları çağırın.

assert.h—Diyagnostikler

Bu dosyada, yürütme esnasında bir savı (mantıksal ifadeyi) kontrol edip, eğer yanlışsa bir diyagnostik görüntüleyen bir “fonksiyon” tanımı vardır:

void                    assert(int)

Eğer bu dosya programa içerilmeden önce NDEBUG #define ile tanımlanmışsa, assert çağrısı dikkate alınmaz; aksi takdirde aşağıdakine benzer bir durum gerçekleşir:

#define assert(exp) { \
  if (!(exp)) { \
    fprintf(stderr,"Assertion failed: %s, file %s, line %d\n", \
      #exp, __FILE__, __LINE__); \
    abort(); \
  } \
}

ctype.h—Karakter Kontrolleri Ve Dönüşümleri

Bu dosya, karakterleri kontrol eden veya değiştiren fonksiyonlar ve/veya makrolar bildirir. Test fonksiyonları veya makroları, doğru için sıfırdan farklı herhangi bir tamsayı, aksi takdirde sıfır döndürürler.

int                     isalnum(int)
int                     isalpha(int)
int                     iscntrl(int)
int                     isdigit(int)
int                     isgraph(int)
int                     islower(int)
int                     isprint(int)
int                     ispunct(int)
int                     isspace(int)
int                     isupper(int)
int                     isxdigit(int)
int                     tolower(int)
int                     toupper(int)

errno.h—Hatalar

Bu dosya, errno değişkeni için bir bildirim içerir. Ayrıca çeşitli kütüphane fonksiyonları tarafından bir hata durumunu göstermek için, EDOM, ERANGE gibi, bu değişkene verilebilecek bazı sıfırdan farklı değişmezler tanımlar.

float.h—Kayan Noktalı Değerler İçin Sınırlar

Bu dosya, kayan noktalı (yani float, double ve long double) değerler için bazı değişmezler tanımlar. Standart tarafından kabul edilebilen en küçük değerler parantez içinde gösterilmiştir.

FLT_DIGduyarlı ondalık rakam sayısı (6)
FLT_EPSILON1.0+FLT_EPSILON!=1.0 şekilde en küçük sayı (1E-5)
FLT_MANT_DIGFLT_RADIX tabanına göre mantisteki rakam sayısı
FLT_MAXen büyük değer (1E+37)
FLT_MAX_10_EXPen büyük ondalık üs
FLT_MAX_EXPen büyük üs
FLT_MINen küçük düzgünlenmiş pozitif değer (1E-37)
FLT_MIN_10_EXPen küçük ondalık üs
FLT_MIN_EXPen küçük üs
FLT_RADIXüssün taban rakamı (2)
FLT_ROUNDStoplamada yuvarlama

DBL_DIGduyarlı ondalık rakam sayısı (10)
DBL_EPSILON1.0+DBL_EPSILON!=1.0 şekilde en küçük sayı (1E-9)
DBL_MANT_DIGDBL_RADIX tabanına göre mantisteki rakam sayısı
DBL_MAXen büyük değer (1E+37)
DBL_MAX_10_EXPen büyük ondalık üs
DBL_MAX_EXPen büyük üs
DBL_MINen küçük düzgünlenmiş pozitif değer (1E-37)
DBL_MIN_10_EXPen küçük ondalık üs
DBL_MIN_EXPen küçük üs
DBL_RADIXüssün taban rakamı
DBL_ROUNDStoplamada yuvarlama

LDBL_DIGduyarlı ondalık rakam sayısı
LDBL_EPSILON1.0+LDBL_EPSILON!=1.0 şekilde en küçük sayı
LDBL_MANT_DIGLDBL_RADIX tabanına göre mantisteki rakam sayısı
LDBL_MAXen büyük değer
LDBL_MAX_10_EXPen büyük ondalık üs
LDBL_MAX_EXPen büyük üs
LDBL_MINen küçük düzgünlenmiş pozitif değer
LDBL_MIN_10_EXPen küçük ondalık üs
LDBL_MIN_EXPen küçük üs
LDBL_RADIXüssün taban rakamı
LDBL_ROUNDStoplamada yuvarlama

limits.h—Tamsayı Değerleri İçin Sınırlar

Bu dosya, çeşitli boylardaki tamsayılar için bazı üst ve alt sınırlarla ilgili değişmezler tanımlar. Kabul edilebilir en düşük değerler parantez içinde gösterilmiştir. Yani, bir derleyici için INT_MAX 32767’den büyük olabilir, fakat Standarda uygun hiçbir derleyicinin bu sayıdan küçük bir INT_MAX sağlamasına izin verilmez.

CHAR_BITbir char’daki bit sayısı (8)
CHAR_MAXen büyük char değeri (UCHAR_MAX veya SCHAR_MAX)
CHAR_MINen küçük char değeri (0 veya SCHAR_MIN)
INT_MAXen büyük (signed) int değeri (+32767)
INT_MINen küçük (signed) int değeri (-32767)
LONG_MAXen büyük (signed) long değeri (+2147483647)
LONG_MINen küçük (signed) long değeri (-2147483647)
SCHAR_MAXen büyük signed char değeri (+127)
SCHAR_MINen küçük signed char değeri (-127)
SHRT_MAXen büyük (signed) short değeri (+32767)
SHRT_MINen küçük (signed) short değeri (-32767)
UCHAR_MAXen büyük unsigned char değeri (255U)
UINT_MAXen büyük unsigned int değeri (0xffff)
ULONG_MAXen büyük unsigned long değeri (0xffffffff)
USHRT_MAXen büyük unsigned short değeri (0xffff)
MB_LEN_MAXbir çokbaytlı karakter içindeki en büyük bayt sayısı

locale.h—Yöre Fonksiyonları

Bu dosya, “struct lconv” için bir tip tanımlaması, LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME değişmezlerinin tanımlarını ve aşağıdaki fonksiyon prototiplerini içerir:

struct lconv *          localeconv(void)
char *                  setlocale(int, const char *)

math.h—Matematiksel Yordamlar

Bu dosya, birtakım kayan noktalı matematik yordamları tarafından hata durumunda döndürülen bir değeri tutmak için HUGE_VAL adlı double değişkenini bildirir. Ayrıca, alan hatası veya taşma durumlarını göstermek için sırasıyla EDOM veya ERANGE değeri errno değişkenine atanır. Fonksiyon prototipleri şöyledir:

double                  acos(double)
double                  asin(double)
double                  atan(double)
double                  atan2(double, double)
double                  ceil(double)
double                  cos(double)
double                  cosh(double)
double                  exp(double)
double                  fabs(double)
double                  floor(double)
double                  fmod(double, double)
double                  frexp(double, int *)
double                  ldexp(double, int)
double                  log(double)
double                  log10(double)
double                  modf(double, double *)
double                  pow(double, double)
double                  sin(double)
double                  sinh(double)
double                  sqrt(double)
double                  tan(double)
double                  tanh(double)

setjmp.h—Yerel Olmayan Atlamalar

Bu dosya, program durumunu saklamak ve tekrar yüklemek için setjmp makrosu ile longjmp fonksiyonunun kullandığı jmp_buf adlı, makineye bağlı, bir tampon bölge için bir tip tanımlar ve ayrıca bu yordamların bildirimini içerir.

void                    longjmp(jmp_buf, int)
int                     setjmp(jmp_buf)

signal.h—Sinyaller

Bu dosya, yürütme esnasında kesintileri veya hataları işlemek için kullanılan fonksiyonlar bildirir.

Sinyal tipleri:

SIGABRTabort çağrısı ile tetiklenen düzensiz sonuçlanma
SIGFPEkayan noktalı işlem hatası
SIGILLhatalı komut—geçersiz fonksiyon imgesi
SIGINTCONTROL+C kesintisi—etkileşimli dikkat
SIGSEGVbellek sınırları dışında erişim
SIGTERMöldürme sonucu yazılım sonlandırma sinyali

Sinyal işleyiş kodları:

SIG_DFLvarsayılan signal işleyişi
SIG_IGNdikkate almama

Hata durumunda signal çağrısı tarafından döndürülen sinyal hata değeri:

SIG_ERRsignal hata değeri

Fonksiyon prototipleri:

int                     raise(int)
void                    (* signal(int, void (*)(int)))(int)

stdarg.h—Değişken Argüman Listeleri

Bu dosya, değişken sayıda argüman alabilen fonksiyonların argümanlarına erişebilmesi için standart yöntemler tanımlar. va_list tipi bir gösterge olarak tanımlanmıştır.

tip                      va_arg(va_list, tip)
void                    va_end(va_list)
void                    va_start(va_list, son_argüman)

stddef.h—Standart Sistem Tanımları

Bu dosya, NULL gösterge değeri, errno dışsal değişkenine bir referans ve uygulamaya bağlı olarak değişen ptrdiff_t (iki göstergenin farkı alındığında elde edilen işaretli değerin tipi), size_t (sizeof işleci tarafından döndürülen işaretsiz değerin tipi) ve wchar_t (geniş bir karakterin tipi) için tanımlar içermektedir.

stdio.h—Standart Girdi Ve Çıktı

Bu dosya, standart girdi/çıktı yordamları tarafından kullanılan yapılar, değerler, makrolar ve fonksiyonlar tanımlar. size_t, va_list, fpos_t ve FILE adlı tipler; BUFSIZ, EOF, NULL, FILENAME_MAX (dosya isimlerinde en büyük karakter sayısı), FOPEN_MAX (aynı anda açık olabilecek en çok dosya sayısı), P_tmpnam (geçici dosyaların açılabileceği altdizin), L_tmpnam (geçici dosya isimlerinin uzunluğu), TMP_MAX (açılabilecek en çok farklı geçici dosya isimleri sayısı), SEEK_CUR, SEEK_END, SEEK_SET, stdin, stdout, stderr, _IOFBF, _IOLBF ve _IONBF değişmezleri bu dosyada tanımlanmışlardır. Fonksiyon prototipleri:

void                    clearerr(FILE *)
int                     fclose(FILE *)
int                     feof(FILE *)
int                     ferror(FILE *)
int                     fflush(FILE *)
int                     fgetc(FILE *)
int                     fgetpos(FILE *, fpos_t *)
char *                  fgets(char *, int, FILE *)
FILE *                  fopen(const char *, const char *)
int                     fprintf(FILE *, const char *, ...)
int                     fputc(int, FILE *)
int                     fputs(const char *, FILE *)
size_t                  fread(void *, size_t, size_t, FILE *)
FILE *                  freopen(const char *, const char *, FILE *)
int                     fscanf(FILE *, const char *, ...)
int                     fseek(FILE *, long, int)
int                     fsetpos(FILE *, const fpos_t *)
long                    ftell(FILE *)
size_t                  fwrite(const void *, size_t, size_t, FILE *)
int                     getc(FILE *)
int                     getchar(void)
char *                  gets(char *)
void                    perror(const char *)
int                     printf(const char *, ...)
int                     putc(int, FILE *)
int                     putchar(int)
int                     puts(const char *)
int                     remove(const char *)
int                     rename(const char *, const char *)
void                    rewind(FILE *)
int                     scanf(const char *, ...)
void                    setbuf(FILE *, char *)
int                     setvbuf(FILE *, char *, int, size_t)
int                     sprintf(char *, const char *, ...)
int                     sscanf(const char *, const char *, ...)
FILE *                  tmpfile(void)
char *                  tmpnam(char *)
int                     ungetc(int, FILE *)
int                     vfprintf(FILE *, const char *, va_list)
int                     vprintf(const char *, va_list)
int                     vsprintf(char *, const char *, va_list)

stdlib.h—Sıkça Kullanılan Kütüphane Fonksiyonları

Bu dosyada, size_t, wchar_t, div_t (div’den döndürülen yapı) ve ldiv_t (ldiv’den döndürülen yapı) tipleri ve NULL, RAND_MAX (rand fonksiyonundan döndürülen en büyük değer), EXIT_SUCCESS (programın başarılı exit kodu) ve EXIT_FAILURE (programın başarısız exit kodu) değişmezleri için tanımlarla MB_CUR_MAX (şu anki yöreye göre bir çokbaytlı karakter içindeki en büyük bayt sayısı) ve errno değişkenleri için bildirimler bulunmaktadır. Fonksiyon prototipleri:

void                    abort(void)
int                     abs(int)
int                     atexit(void (*)(void))
double                  atof(const char *)
int                     atoi(const char *)
long                    atol(const char *)
void *                  bsearch(const void *, const void *, size_t,
                        size_t, int (*)(const void *, const void *))
void *                  calloc(size_t, size_t)
div_t                   div(int, int)
void                    exit(int)
void                    free(void *)
char *                  getenv(const char *)
long                    labs(long)
ldiv_t                  ldiv(long, long)
void *                  malloc(size_t)
int                     mblen(const char *, size_t)
size_t                  mbstowcs(wchar_t *, const char *, size_t)
int                     mbtowc(wchar_t *, const char *, size_t)
void                    perror(const char *)
void                    qsort(void *, size_t, size_t,
                        int (*)(const void *, const void *))
int                     rand(void)
void *                  realloc(void *, size_t)
void                    srand(unsigned int)
double                  strtod(const char *, char **)
long                    strtol(const char *, char **, int)
unsigned long           strtoul(const char *, char **, int)
int                     system(const char *)
size_t                  wcstombs(char *, const wchar_t *, size_t)
int                     wctomb(char *, wchar_t)

Eğer tolower makrosu #define ile tanımlanmamışsa,

int                     tolower(int)

Eğer toupper makrosu #define ile tanımlanmamışsa,

int                     toupper(int)

string.h—Karakter Dizileri İşleyen Fonksiyonlar

Bu dosya NULL değişmezi ile size_t için bir tip tanımı ve aşağıdaki fonksiyon prototiplerini içerir:

void *                  memchr(const void *, int, size_t)
int                     memcmp(const void *, const void *, size_t)
void *                  memcpy(void *, const void *, size_t)
void *                  memmove(void *, const void *, size_t)
void *                  memset(void *, int, size_t)
char *                  strcat(char *, const char *)
char *                  strchr(const char *, int)
int                     strcmp(const char *, const char *)
int                     strcoll(const char *, const char *)
char *                  strcpy(char *, const char *)
size_t                  strcspn(const char *, const char *)
char *                  strerror(int)
size_t                  strlen(const char *)
char *                  strncat(char *, const char *, size_t)
int                     strncmp(const char *, const char *, size_t)
char *                  strncpy(char *, const char *, size_t)
char *                  strpbrk(const char *, const char *)
char *                  strrchr(const char *, int)
size_t                  strspn(const char *, const char *)
char *                  strstr(const char *, const char *)
char *                  strtok(char *, const char *)
size_t                  strxfrm(char *, const char *, size_t)

time.h—Tarih Ve Saat Fonksiyonları

Bu dosya, zaman yordamları için bildirimler ile, size_t ve sırasıyla clock ve time fonksiyonları tarafından döndürülen, uygulamaya bağlı clock_t ve time_t tiplerinin tanımlarını içerir. Ayrıca, localtime ve gmtime yordamları tarafından döndürülüp asctime tarafından kullanılan yapı şöyle tanımlanmaktadır:

struct tm {
  int tm_sec;           /* dakikadan sonraki saniyeler: [0,60] */
  int tm_min;           /* saatten sonraki dakikalar: [0,59] */
  int tm_hour;          /* geceyarisindan beri saatler: [0,23] */
  int tm_mday;          /* ayin gunu: [1,31] */
  int tm_mon;           /* Ocak'tan beri aylar: [0,11] */
  int tm_year;          /* 1900'dan beri yillar */
  int tm_wday;          /* Pazar'dan beri gunler: [0,6] */
  int tm_yday;          /* Ocak 1'den beri gunler: [0,365] */
  int tm_isdst;         /* Yaz Saati Uygulamasi bayragi */
}

CLOCKS_PER_SEC makrosu, “clock()/CLOCKS_PER_SEC” ifadesi aracılığıyla, saniye cinsinden işlemci zamanını elde etmek için kullanılabilir.

Bu dosyada, ayrıca, ctime ailesinden yordamlar tarafından kullanılan küresel değişkenler için extern bildirimleri de bulunmaktadır:

int _daylight;          /* eger Yaz Saati Uygulamasi kullani-
                         * liyorsa, sifirdan farkli bir deger */
long _timezone;         /* saniye cinsinden Duzenlenmis Evrensel
                         * Saat ile yerel saat arasindaki fark */
char * _tzname[2];      /* Standart/Yaz Saati dilim isimleri */

Fonksiyon prototipleri:

char *                  asctime(const struct tm *)
clock_t                 clock(void)
char *                  ctime(const time_t *)
double                  difftime(time_t, time_t)
struct tm *             gmtime(const time_t *)
struct tm *             localtime(const time_t *)
time_t                  mktime(struct tm *)
size_t                  strftime(char *, size_t, const char *,
                        const struct tm *)
time_t                  time(time_t *)