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.
*[Macro]Büyük Ölçekte Geçerli Değer Yerleştirme
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. |
#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.
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
#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;
}
./my_app
Dairenin yarıçapını girin:?77
Çemberin Çevresi = 483.713989
#define ön-işlem bildirimi, parametrelerle Macro tanımları yazmak için kullanılabilir.
Örneğin
#define circumference(r) (2*3.141*(r))
#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;
}
Dairenin yarıçapını girin:?77
Çemberin Çevresi = 483,713989
Para birimi sembolü: ₺
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.
#include<stdio.h>
#define NUM 11
void main()
{
#if((NUM%2)==0)
printf("Sayi Cifttir\n");
#else
printf("Sayi Tektir\n");
#endif
}
gcc -o my_app *.c
Sayi Tektir
#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;
}
gcc -o my_app *.c
rty45h546543dfdezü
rty45h546543dfdezü
""""""""""""""
""""""""""""""
431368/+*+
431368/+*+
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. |
#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;
}
NULL : 0
EXIT_SUCCESS : 0
EXIT_FAILURE : 1
RAND_MAX : 2147483647
File Name : PreProcessorMacro.c
DATE : Jan 7 2018
Line : 11