Koşullu derlemede kullanılan önişemci komutları ile birlikte, kaynak kodunda belirtlen kısımların istediğimiz gibi derlenmesini sağlayabiliriz.
Ön işlemci komutlarının kullanıldığı yerler.
- Koşullu derleme komutları debug işlemlerinde sıklıkla kullanılır.
- Kaynak kodunun birden fazla platform için geliştirildiğinde kullanılmaktadır.
Koşullu Derleme Komutları
Koşullu derlemede kullanılan komutlar aşağıdaki gibidir.
- #if
- #else
- #elif
- #ifdef
- #ifndef
- #endif
#if, #elif , #else #endif Önişlemci Komutları
#if önişlemci komutunun argümanı tamsayı türünden değişken olmalıdır. #if komutu, #elif, #else ve #endif komutu arasındaki kaynak kodu tanım şartları sağlıyorsa derlenir. Aşağıdaki kaynak kodumuzda MAX 25 olarak tanımlandı. Bu #if önişlemci komutunun şartını sağladığından dolayı o kısım derlenir.
kaynak kodunda derlenen kısım aşağıdaki gibidir.
1 |
printf("if %d \n",MAX); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <stdio.h> #define MAX 25 int main() { #if MAX < 50 printf("if %d \n",MAX); #elif MAX < 100 && 50 <= MAX printf("elif %d \n",MAX); #else printf("else %d \n",MAX); #endif /*MAX > 100 */ return 0; } |
defined Önişlemci İşleci
Defined işlecinin terimi olan isim daha önceden tanımlanmışsa defined işleci 1 değeri üretir. Bunu #if önişlemci komutu ile kullandığımızda şartı o zaman sağlayıp o kısmın derlenmesi sağlanır.
Aşağıdaki iki işleç aynı işlevi görmektedir.
- defined (ESP32)
- defined ESP32
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <stdio.h> #define STM32 int main() { #if defined (ESP32) printf("ESP32 için kaynak kodlari derleniyor\n" ); #elif defined STM32 printf("STM32 için kaynak kodlari derleniyor\n"); #endif return 0; } |
#ifdef
#if önişlemci komutunun kullanıldığı yerde #ifdef komutu kullanılabilir. #define komutuyla bir isim tanımlanmışsa ön işlemci işlemci komutu o kısmı derler.
Aşağıdaki iki komutta aynı işlevi görmektedir.
- #if defined (ESP32)
- #ifdef ESP32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <stdio.h> #define STM32 int main() { #ifdef ESP32 printf("ESP32 için kaynak kodlari derleniyor\n" ); #endif #ifdef STM32 printf("STM32 için kaynak kodlari derleniyor\n"); #endif return 0; } |
#ifndef
Aşağıdaki iki komut aynı işlevi görmektedir. #define komutuyla bir isim tanımlanmamışsa ön işlemci işlemci komutu o kısmı derler.
- #ifndef STM32
- #if !defined (STM32)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <stdio.h> #define STM8 int main() { #ifdef STM32 printf("STM32 için kaynak kodlari derleniyor\n" ); #endif #ifndef STM32 printf("STM8 için kaynak kodlari derleniyor\n"); #endif return 0; } |