C Preprocessor Bildirimleri

C  Programlama  GCC 

 03 Ocak 2018 - Türkiye



Follow
Follow
Follow

9 dakikalık okuma

C Preprocessor Önişlemci bildirimleri compiler derleyicinin bir parçası değildir ancak C programlama dilinin gücünü genişletir. Tüm önişlemci direktifleri bir # sembolü ile başlar. Önişleme adımı, programın kaynak kodunun derlenmesinden önce başlar ve asıl derleme öncesi gerekli ön-işlemlerin yapılmasını derleyiciye bildirir.

Preprocessor

Önişlemci Bildirimleri Hakkında Önemli Hususlar

Preprocessor

Önişlemci Talimat Tipleri

*[Macro]Büyük Ölçekte Geçerli Değer Yerleştirme

Önişlemci talimatlarının bir listesi aşağıdadır

Talimat Tanımı
#include Bir C Programına üsbilgi dosyasını[header file] dahil eder.
#define İkame makrosudur. Bir ifade vasıtası ile sabit bir değeri programa yerleştirir.
#if Koşullu ifadenin sonucuna bağlı bir kod bloğu içerir.
#else #if'in tamamlayıcısıdır.
#elif #else ve #if ile benzerdir.
#endif Bu, #if, #elif gibi koşullu yönergelerin sonunu işaretler.
#undef Tanımsız bir önişlemci makrosu.
#ifdef Eğer bir sabit değer daha önce #define ile tanımlanmışsa true döndürür.
#ifndef Eğer sabit değer daha önce #define ile tanımlanmamışsa true döndürür.
#pragma Derleyiciye özel komutlar verir.
#error Hata mesajını stderr'da yazdırır.

SUNMI(선미) _ Gashina(가시나)

#include önişlemci bildirimleri

#include Önişlemci Bildirimleri, C Programında üstbilgi(*.h) dosyasını eklemek için kullanılır. Yol belirtilmemişse, geçerli dizindeki üstbilgi(*.h) dosyasını denetler. Kullanıcı tanımlı üstbilgi(*.h) dosyasını eklemek için açılı parantez<> yerine çift tırnak"" işareti kullanıyoruz.

Örneğin

#include <string.h>          // Standard ÜstBilgi Dosyası
#include "myHeaderFile.h"    // Kullanıcı Tanımlı ÜstBilgi Dosyası

İlk satır Önişlemciye bu satırı string.h başlık dosyasının içeriğiyle değiştirmesini söyler.
İkinci satır önişlemciye myHeaderFile.h dosyasını geçerli dizinden almasını ve myHeaderFile.h dosyasının içeriğini eklemesini söyler.

#define önişlemci bildirimleri

Bu basit bir büyük ölçekte geçerli yerleştirmedir. Sabitin tüm tekrarlamalarını yerlerine koyar ve bir ifadeyle değiştirir.

#define identifier value

Örneğin

#define PIE 3.141
#define ZERO 0

#define Ön işlemci bildirimlerinin kullanımını göstermek için C programı

#include <stdio.h>

#define PI 3.141

int main(){
    int radius;
    float circumference;
    printf("Dairenin yarıçapını girin:?");
    scanf("%d", &radius);
    
    circumference = 2*PI*radius;
    
    printf("Çemberin Çevresi = %f\n", circumference);

    return 0;
}

Çıktısı

./my_app
Dairenin yarıçapını girin:?77
Çemberin Çevresi = 483.713989

#define seçenekleri ile Macro yerleştirme

#define ön-işlem bildirimi, parametrelerle Macro tanımları yazmak için kullanılabilir.

Örneğin

#define circumference(r) (2*3.141*(r))

Macro değişkenleri yerleştirmeyi Gösteren C Programı

#include <stdio.h>
#include <locale.h>

#define circumference(r) (2*3.141*(r))

int main(){
    int radius;
    float c;
    struct lconv *loc;

    setlocale (LC_ALL, "tr_TR.UTF-8");
    loc = localeconv();

    printf("Dairenin yarıçapını girin:?");
    scanf("%d", &radius);
    
    c = circumference(radius); 

    printf("Çemberin Çevresi = %f\n", c);
    printf("Para birimi sembolü: %s\n", loc->currency_symbol);
    return 0;
}

Çıktısı

Dairenin yarıçapını girin:?77
Çemberin Çevresi = 483,713989
Para birimi sembolü: ₺

#if, #else ve #endif Koşullu Derleme Önişlemci Bildirimleri

Koşullu Derleme Bildirimleri, koşullu ifadenin sonucuna dayalı bir kod bloğu eklememizi sağlar.

#if Condition_Expression
    statements;
#else
    statements;
#endif

#If, #else durumuna benzer ancak derlemeden önce, (Condition_Expression) yalnızca sabit bir ifade olmalıdır.

#if, #else ve #endif kullanarak Koşullu Derlemeyi gösteren C programı.

#include<stdio.h>
#define NUM 11

void main()
{
#if((NUM%2)==0)
      printf("Sayi Cifttir\n");
#else
      printf("Sayi Tektir\n");
#endif
}

Çıktısı

gcc -o my_app *.c
Sayi Tektir

Başka Bir Örnekte #if ve #else Kullanımı

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{ 
    int ch;
    while ((ch=getchar()) != EOF) /* stdin(klavyeden) "abcde" oku/yaz */
          printf("%c", ch);
 
    /* EOF'ye ulaşma nedenini test et. */
    if (feof(stdin)) /* eğer dosya sonu durumundan kaynaklanan bir arıza varsa */
       puts("Dosya sonuna ulaşıldı");
    else if (ferror(stdin)) /* eğer başarısızlık başka bir hatadan kaynaklanırsa */
        {
          perror("getchar()");
          fprintf(stderr,"getchar() dosya %s satırda başarısız oldu # %d\n", __FILE__,__LINE__-9);
          exit(EXIT_FAILURE);
        }
 
    return EXIT_SUCCESS;
}

Çıktısı

gcc -o my_app *.c
rty45h546543dfdezü
rty45h546543dfdezü
""""""""""""""
""""""""""""""
431368/+*+
431368/+*+

C Dilinde Önceden Tanımlanmış Macro bildirimleri

C Programlama dili, bir dizi Macro yerleştirmeler tanımlar. Aşağıda, yaygın olarak kullanılan bazı Macro yerleştirmelerin listesi bulunmaktadır.

Macro Tanımı
NULL Bir boş[NULL] gösterici sabitinin değeri.
EXIT_SUCCESS Programın başarıyla tamamlanması durumunda çıkış fonksiyonunun geri dönüş değeri.
EXIT_FAILURE Başarısızlık nedeniyle programın sonlandırılması durumunda geri döndürülecek çıkış fonksiyonu değeri.
RAND_MAX Rand işlevi tarafından döndürülen maksimum değer.
__FILE__ Geçerli dosya adını bir dize olarak içerir.
__LINE__ Geçerli satır sayısını bir tam sayı sabiti olarak içerir.
__DATE__ MM DD YYYY" biçiminde geçerli tarih içerir.
__TIME__ HH: MM: SS" biçimindeki geçerli saati içerir.

Macro bildirimlerinin değerini basan C programı

#include <stdio.h>
#include <stdlib.h>

int main(){
   printf("NULL : %d\n", NULL );
   printf("EXIT_SUCCESS : %d\n", EXIT_SUCCESS );
   printf("EXIT_FAILURE : %d\n", EXIT_FAILURE );
   printf("RAND_MAX : %d\n", RAND_MAX );
   printf("File Name : %s\n", __FILE__ );
   printf("DATE : %s\n", __DATE__ );
   printf("Line : %d\n", __LINE__ );

   return 0;
}

Çıktısı

NULL : 0
EXIT_SUCCESS : 0
EXIT_FAILURE : 1
RAND_MAX : 2147483647
File Name : PreProcessorMacro.c
DATE : Jan  7 2018
Line : 11


Paylaş:



En Yeni İçerikler

İlgili İçerikler