Preprocessing
Preprocessing konusuna değinilen kısım.
Preprocessing Nedir?
Preprocessor, kaynak kodunuzu derlenmeden önce dönüştüren bir makro ön işlemcidir (makrolar tanımlamanıza izin verir). Bu dönüşümler başlık dosyalarının dahil edilmesi, makro genişletmeleri vb. olabilir. Tüm ön işlemci yönergeleri #
sembolü ile başlar.
Ön işlemci komutları, #
karakteri ile başlayan satırlardır ve ön işlemci tarafından ön işlemci komutları olarak yorumlanır. Bu komutlar, kendi sözdizimi ve anlambilimi olan basit bir makro dilidir.
Ön işlemci komutlarının bazı örnekleri şunlardır:
#define
bir ön işlemci makrosunu tanımlar. Örneğin,#define PI 3.14
PI'yi 3.14 olarak değiştirir. Makrolar küçük fonksiyonlar gibi çağrılabilir, ancak işlenmesi daha az yük getirir. Makrolar nesne benzeri (parametre almaz) veya işlev benzeri (parametre alabilir) olabilir. Bir makro tanımını#undef
ile silmek mümkündür.#include
başka bir dosyadan belirli bir başlık dosyasını ekler. Örneğin,#include <stdio.h>
ön işlemciye stdio.h dosyasındaki tüm içeriği dahil etmesini söyler. Bu ayrıca çift tırnak içinde de yazılabilir -#include "stdio.h"
. Not: Dosya adı açılı ayraç içindeyse, dosya standart derleyici include yollarında aranır. Dosya adı çift tırnak içindeyse, arama yolu geçerli kaynak dizinini içerecek şekilde genişletilir.#undef
bir ön işlemci makrosunu tanımsız bırakır. Örneğin,#undef FILE_SIZE
FILE_SIZE'ı tanımsız bırakır.#ifdef
bu makro tanımlanmışsa true döndürür. Örneğin,#ifdef DEBUG /* Hata ayıklama ifadeleriniz burada */ #endif
DEBUG tanımlanmışsa, kapalı ifadeleri işler. Bu, derleme sırasında -DDEBUG bayrağını gcc derleyicisine geçirdiğinizde yararlıdır. Bu DEBUG'yi tanımlayacak, böylece derleme sırasında hata ayıklamayı açıp kapatabilirsiniz.#ifndef
bu makro tanımlanmamışsa true döndürür. Örneğin,#ifndef MESSAGE #define MESSAGE "You wish!" #endif
MESSAGE zaten tanımlanmamışsa MESSAGE'yi tanımlar.#endif
ön işlemci koşulunu sonlandırır. Örneğin,#if defined(__linux__) /* Linux için kod */ #endif
Linux için kodu işledikten sonra koşulu sonlandırır.#if
derleme zamanındaki bir koşulun doğru olup olmadığını test eder. Örneğin,#if __STDC__ /* ANSI C kodu */ #else /* Geleneksel C kodu */ #endif
STDC doğruysa ANSI C kodunu işler, değilse geleneksel C kodunu işler.#else
#if
'in alternatifidir. Örneğin,#if defined(__linux__) /* Linux için kod */ #else /* Diğer platformlar için kod */ #endif
Linux tanımlanmışsa Linux için kodu işler, değilse diğer platformlar için kodu işler.#elif
#else
ve#if'i
tek bir ifadede birleştirir. Örneğin,#if defined(__linux__) /* Linux için kod */ #elif defined(_WIN32) /* Windows için kod */ #else /* Diğer platformlar için kod */ #endif
Linux tanımlanmışsa Linux için kodu işler, _WIN32 tanımlanmışsa Windows için kodu işler, hiçbiri tanımlanmamışsa diğer platformlar için kodu işler.#error
stderr üzerinde hata mesajı yazdırır. Örneğin,#if !defined(__cplusplus) #error A C++ compiler is required! #endif
__cplusplus tanımlanmamışsa, bir C++ derleyicisi gerektiğini söyleyen bir hata mesajı verir.#warning
stderr üzerinde uyarı mesajı yazdırır. Örneğin,#warning This is a work in progress #endif
Bu bir devam eden çalışmadır diye bir uyarı mesajı verir.#pragma
derleyiciye standartlaştırılmış bir yöntem kullanarak özel komutlar verir. Örneğin,#pragma once
aynı başlık dosyasının birden fazla kez dahil edilmesini önler.
Last updated