C++ Önişlemci (Preprocessor) Komutları (Visual Studio 2022)

  • 11
  • (1)
  • (5)
  • 08 Eyl 2024

Önişlemci Komutları Nelerdir?

Önişlemci (Preprocessor) komutları derleme işlemi yapılmadan önce çalıştırılan komutlardır. Bunların bazıları koşullu ve hatta değişkene bağlı çalıştırılabilir. Böylece derlenmek istenen C++ kodu belli koşullara bağlı olarak daha interaktif bir biçimde derlenebilir.

include Komutu

Kaynak koduna include komutunun yanındaki parametre ile belirlenen dosyanın kopyasını yerleştirir. Bu işlemi derlemeden önce yapar. O dosya içerisindeki fonksiyon, değişken ve sınıflar kaynak kodunda rahatlıkla kullanılabilir. Basitçe bir kütüphane ekleme görevi görür.


// iostream dosyası kaynak koda eklenir
#include <iostream>
using namespace std;

int main()
{
    string name, lastName;
    cout << "Name: ";
    cin >> name;
    cout << name + " name created\n";
}

#include <dosya> şeklinde kullanım C++ dilinin standart kütüphanesindeki dosyalar için kullanılır. #include "dosya" şeklinde kullanım ise mevcut kaynak kodu dosyasının bulunduğu klasörün içindeki dosyalar için kullanılır.

define Komutu

Kaynak kodu içerisinde muhtelif yerlerde kullanılmak üzere sabitler oluşturur. Bu sabit değerleri belli dizilerin uzunluğunda kullanabilirsiniz. Örneğin aynı diziyi 4-5 farklı yerde tanımlayacaksanız uzunluğunu her değiştirmek istediğinizde tek tek değiştirmek yerine define önişlemci komutu ile tanımlı bir sabit kullanabilirsiniz.


#include <iostream>
using namespace std;

#define ARRAY_LENGTH 10

int main()
{
    int number_array[ARRAY_LENGTH];
    int i = 0; //Sayaç
    // i ARRAY_LENGTH değerinden küçükse döngü döner
    while (i < ARRAY_LENGTH) {
        // Ekrana Number 1, Number 2 şeklinde i + 1 yazılır
        cout << "Number" << (i + 1) << ": ";
        int number;
        cin >> number; // Ekrandan sayı okunur
        number_array[i] = number; // dizinin i. elemanına atanır
        i++; // Sayaç arttırılır
    }
    i = 0;
    // Girilen sayılar 2. bir döngü ile ekrana yazılır
    cout << ARRAY_LENGTH << " items exist in array\n";
    while (i < ARRAY_LENGTH) {
        cout << number_array[i] << " ";
        i++;
    }
    cout << "\n\n";
}

ARRAY_LENGTH değeri önişlemci komutu define ile tanımlanmıştır. Aslında derlemeden sonra programın içerisinde böyle bir değişken olmayacaktır. Derlemeden hemen önce derleyici ARRAY_LENGTH gördüğü her yere 10 değerini koyacaktır. Böylelikle daha sonra bu dizinin uzunluğunu değiştirmek istediğinizde tek tek kodun içerisinde değiştirmek yerine tek bir yerden değişiklik yapabilirsiniz.

cpp console preprocessor define c++

#define ARRAY_LENGTH 10 yerine #define ARRAY_LENGTH 5 yazdığınızda program aşağıdaki gibi çalışacaktır.

cpp console preprocessor define c++

define komutu ile makro tanımlayabilirsiniz.


#include <iostream>
using namespace std;

#define SQUARE(x) (x * x)
#define MULTIPLY(x, y) (x * y)

int main()
{
	int sqr = SQUARE(5);
	int mult = MULTIPLY(4, 3);
	cout << "Square of 5: " << sqr << "\n";
	cout << "Multiply of 4 and 3: " << mult << "\n";
}

Programın çıktısı aşağıdaki gibi olacaktır.

cpp macro preprocessor define c++

undef Komutu

undef komutunu kullanarak define komutu ile tanımlanmış bütün sabit değerleri ve makroları kaldırırsınız.


#include <iostream>
using namespace std;

#define NUMBER 55
#define SQUARE(x) (x * x)
#define MULTIPLY(x, y) (x * y)

int main()
{
	int sqr = SQUARE(5);
	int mult = MULTIPLY(4, 3);
	cout << "Square of 5: " << sqr << "\n";
	cout << "Multiply of 4 and 3: " << mult << "\n";
#undef
    // Buradan itibaren yukarıdaki tanımlı değer ve makrolar geçersizdir.
}

if, elif, else, endif Komutları

if, elif, else ve endif komutları derleme işlemi gerçekleşmeden önce koşullu derleme yapmaktadır.


#include <iostream>
#include <locale>
using namespace std;

#define COMP 0

int main()
{
	setlocale(LC_ALL, "Turkish");
	cout << "Bu kısım her zaman derlenecektir\n";
#if COMP == 0
	cout << "Bu kısım önişlemci tanımlı COMP değeri 0 (sıfır) olduğunda derlenecektir\n";
#elif COMP == 1
	cout << "Bu kısım önişlemci tanımlı COMP değeri 1 (bir) olduğunda derlenecektir\n";
#elif COMP == 2
	cout << "Bu kısım önişlemci tanımlı COMP değeri 2 (iki) olduğunda derlenecektir\n";
#else
	cout << "Bu kısım önişlemci tanımlı COMP değeri hepsinden (0, 1, 2) farklı olduğunda derlenecektir\n";
#endif
	cout << "Bu kısım da her zaman derlenecektir\n\n";
}

define önişlemci komutu ile tanımlanan COMP değeri 0 olduğunda aşağıdaki gibi bir çıktı alınacaktır.

cpp macro preprocessor define if c++

#define COMP 0 satırını #define COMP 1 yaptığınızda çıktı şöyle olacaktır.

cpp macro preprocessor define if c++

#define COMP 1 satırını #define COMP 2 yaptığınızda çıktı bu sefer şöyle olacaktır.

cpp macro preprocessor define if c++

Hepsinden farklı bir değer verdiğinizde ise (mesela 15) program çıktısı aşağıdaki gibi olacaktır.

cpp macro preprocessor define if c++

ifdef, ifndef Komutları

define komutu ile tanımlı bir sabitin tanımlı olup olmadığına göre koşul belirler. Bu önişlemci komutu genellikle programın DEBUG modlarını belirlemek için kullanılır. Başka çeşitli amaçlar için de kullanılmaktadır.


#include <iostream>
#include <locale>
using namespace std;

#define DEBUG 1

int main()
{
	setlocale(LC_ALL, "Turkish");
	cout << "Bu kısım her zaman derlenecektir\nBir sayı girin: ";
	int a;
	cin >> a;
#ifdef DEBUG
	cout << "[DEBUG] Girilen sayı: " << a << "\n";
#endif
	cout << "Sayının karesi: " << (a * a) << "\n\n";
}

Programı derleyip çalıştırdığınızda DEBUG sabiti mevcut olduğundan ötürü çıktı aşağıdaki şekilde olacaktır.

cpp macro preprocessor define if c++

#define DEBUG 1 satırını sildiğinizde ise çıktı aşağıdaki şekilde olacaktır.

cpp macro preprocessor define if c++
İlişkili İçerikler

C++ dili ile ilk programınızı yazmak için ücretsiz olan Dev-Cpp uygulamasını indirip kurabilirsiniz. Dev-Cpp kendi editörü ve derleyicisi ile yazdığınız kodları rahatlıkla çalıştıracaktır.

Bu makale içerisinde Visual Studio 2022 üzerinde C++ konsol uygulaması oluşturup, üzerinde değişik örnekler denenmektedir. İnceleyip uygulayabilirsiniz.