#pragmaBu önişlemci deyimi bir komut beliticisi ile birliktikte kullanılır. Genel kullanım biçimi:
#pragma
komut_belirticisişeklindedir. Bu deyim, aldığı argümana bağlı olarak derleyiciden derleyiciye değişebilen işlevlere sahiptir. Ayrıca, her derleyici #pragma deyimine sahip değildir. #pragma deyiminin ayrıntılı kullanımı için çalıştığınız derleyicinin başvuru kitabına bakmalısınız. Burada sadece 8086 sistemlerde çalışabilen #pragma inline komutu anlatılacaktır
[2],
[4].
#pragma inline derleyiciye program içinde sembolik makina dili (Assembler) kodlarının bulunduğunu bildirir. Bu kodlar asm anahtar sözcüğüyle yapılır. Örneğin:
Program 20.8: C kodu içine gömülmüş bir asm kodu
[color=gray] 1: /* 20prg08.c: C kodu içine gömülmüş bir asm kodu */ 2: 3: #include <stdio>
4: 5: #pragma inline
6: 7: void pos(int satir,int sutun)
8: {
9: asm mov ah,2
10: asm mov bh,0
11: asm mov dh,satir
12: asm mov dl,sutun
13: asm int 10h
14: }
15: 16: void main(void)
17: {
18: pos(20,10);
19: getchar();
20: pos(0,0);
21: getchar();
[color:bbeb=gray:bbeb]22: }
Program 20.8, imleci ekranın istenilen (x,y) koordinatına taşımak için kullanılabilir. 9-13. satırlardaki ifadeleri tek bir asm bloğu altında toplamak mümkündür: asm{
mov ah,2
mov bh,0
mov dh,satir
mov dl,sutun
int 10h
}
#errorÖnişlemci bu deyimle karşılaşınca yanındaki mesajı ekrana yazar ve derleme işlemine son verir. Mesela, yazmış olduğunuz program 32 bitlik bir işletim sistemi (UNIX veya Linux gibi) için tasarlanmışsa ve program 16 bitlik işletim sisteminde (MSDOS gibi) derlenecekse kullanıcıya buna dair bir uyarı mesajı vermek uygun olur
[2-4]. Örneğin:
#if (sizeof(int)==2)
#error Bu program 16 bitlik işletim sisteminde derlenemez !...
#endif
Eğer DOS altında çalışıyorsanız önişlemci derleme işlemine: Bu program 16 bitlik işletim sisteminde derlenemez !...mesajı ile son verir. Mesajın tırnak içinde yazılmadığına dikkat ediniz.
Önceden Tanımlanmış Sembolik SabitlerBazı sembolik sabitler derleyici tarafından önceden tanımlanmıştır. Bu kısımda, bazı standart sembolik sabitler incelenektir
[2-4].
Tablo 20.1: Önceden tanımlı bazı sembolik sabitler Sabit ismiAçıklama__LINE__
Önişlemci bu sabit yerine kaynak koddaki o anda bulunan satır numarasını yerleştirir.
__FILE__
Kaynak dosyanın ismin tutar.
__DATE__
Önişlemci bu sabit yerine derlemenin yapıldığı zaman tarihi (ay gün yıl formatında) yazar.
__TIME__
Önişlemci bu sabit yerine derlemenin yapıldığı zaman zamanı (sa:dak:sn gün yıl formatında) yazar.
__STDC__
C dilinde kullanılan kimi anahtar sözcükler standart değildir. Derleyici eğer yalnızca standart C'nin anahtar sözcüklerini destekliyorsa bu sabit tanımlı varsayılır.
M_PI
Pi sayısını turar (M_PI=3.14159265358979323846). Ayrıca bkz: math.h
M_E
e sayısını turar (M_E=2.7182818284590452354). Ayrıca bkz: math.hAşağıdaki örnekleri inceleyiniz:
Program 20.9: C dilindeki bazı tanımlı sabitler
[color=gray] 1: /* 20prg10.c: Sembolik sabitler */ 2: 3: #include <stdio>
4: 5: main()
6: {
7: printf("Satir No : %d\n",__LINE__);
8: printf("Dosya adi : %s\n",__FILE__);
9: printf("Tarih : %s\n",__DATE__);
10: printf("Saat : %s\n",__TIME__);
[color:bbeb=gray:bbeb]11: }
DERLEME ve ÇALIŞTIRMA Turbo C (MS DOS)
GCC (Linux)
C:\TC> tcc 20prg09.c
C:\TC> 20prg09
$ gcc 20prg09.c -o 20prg09
$ ./20prg09
ÇIKTI
Satir No : 7
Dos ya adi : 20prg10.c
Tarih : Jul 11 2004
Saat : 17:52:30
Program 20.10: C dilindeki bazı tanımlı sabitler
[color=gray] 1: /* 20prg10.c: C dilindeki bazı tanımlı sabitler */ 2: 3: #include <stdio>
4: #include <math>
/* pi ve e sayilari icin !*/ 5: 6: #ifdef __STDC__
7: #define MESAJ "Bu derleyici ANSI C "
8: #else
9: #define MESAJ "Bu derleyici ANCI C degil "
10: #endif
11: 12: main()
13: {
14: puts(MESAJ);
15: printf("Pi sayisi = %f\n",M_PI);
16: printf("e sayisi = %f\n",M_E);
[color:bbeb=gray:bbeb]17: }
DERLEME ve ÇALIŞTIRMA Turbo C (MS DOS)
GCC (Linux)
C:\TC> tcc 20prg10.c
C:\TC> 20prg10
$ gcc 20prg10.c -o 20prg10
$ ./20prg10
ÇIKTI MS DOS (Turbo C)
Linux
Bu derleyici ANCI C degil
Pi sayisi = 3.141593
e sayisi = 2.718282
Bu derleyici ANSI C
Pi sayisi = 3.141593
e sayisi = 2.718282