C++ Önişlemci (Preprocessor) Komutları (Visual Studio 2022)
- 10
- (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.
#define ARRAY_LENGTH 10
yerine #define ARRAY_LENGTH 5
yazdığınızda program aşağıdaki gibi çalışacaktır.
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.
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.
#define COMP 0
satırını #define COMP 1
yaptığınızda çıktı şöyle olacaktır.
#define COMP 1
satırını #define COMP 2
yaptığınızda çıktı bu sefer şöyle olacaktır.
Hepsinden farklı bir değer verdiğinizde ise (mesela 15) program çıktısı aşağıdaki gibi olacaktır.
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.
#define DEBUG 1
satırını sildiğinizde ise çıktı aşağıdaki şekilde olacaktır.
İlişkili İçerikler
Bu makale içerisinde Visual Studio 2022 üzerinde C++ konsol uygulaması oluşturup, üzerinde değişik örnekler denenmektedir. İnceleyip uygulayabilirsiniz.