CodeBlanks Logo Icon CodeBlanks

Compilation phases

C++ derleme aşamalarını öğrenirsin.

Compilation phases

C++ derlemesi dört aşamada gerçekleşir: önişleme (preprocess), derleme (compile), derleyici üretimi (assemble) ve bağlama (link). Her aşama bir öncekinin çıktısını alır.

Önişleme #include, #define ve koşullu derleme yönergelerini işler. Derleme, önişlenmiş kaynağı makineye yakın assembly koda çevirir. Üretim, assembly'i nesne dosyasına (.o) dönüştürür. Bağlama, nesne dosyalarını birleştirip çalıştırılabilir dosya üretir. Bu ayrım, hangi aracın hangi hatayı raporladığını anlamanı sağlar.

Aşama ayrıntıları

Her aşamanın çıktısı bir sonrakının girdisidir. Önişleme .cpp dosyasını .ii dosyasına çevirir; bu dosya tüm başlıkların açılmış halidir. Derleme .ii'yi .s (assembly) dosyasına çevirir. Üretim .s'yi .o (nesne) dosyasına çevirir.

Bağlama ise birden çok .o dosyasını alır, sembolleri çözer ve çalıştırılabilir dosya üretir. g++ -E main.cpp yalnızca önişleme yapar; g++ -S main.cpp derlemeye kadar gider; g++ -c main.cpp üretmeye kadar gider. Bu bayraklar her aşamayı ayrı çalıştırır.

Uygulama #define makrosu kullan

#define ANSWER 42 yaz. main içinde std::cout << ANSWER; yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// ANSWER makrosunu burada tanımla

int main() {
    // ANSWER'ı yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

#define ANSWER 42

int main() {
    std::cout << ANSWER;
    return 0;
}

Beklenen çıktı

42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 #include yönergeleri hangi aşamada işlenir?

main.cpp
#include <iostream>
int main() { ... }
  • Önişleme Doğru cevap
  • Derleme
  • Bağlama
  • Çalıştırma

Açıklama: Önişleme, #include ve #define yönergelerini işler.

2 #define adını tamamla

Soru
#define ____ 42
Cevap
#define ANSWER 42

Açıklama: ANSWER makrosu 42 değerini alır.

3 Aşamayı rolüne eşle

Kavram Anlamı
preprocess #include işleme
compile .cpp → .s (assembly)
assemble .s → .o (object)
link .o → çalıştırılabilir

Uzman bölümündeki tüm dersler