Kompilasi Kondisional
ifdef dan makro.
Kompilasi Kondisional adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C Academy mencakup 4 pelajaran total.
Prapemroses
Sebelum compiler melihat kode Anda, prapemroses dijalankan. Prapemroses menangani setiap baris yang diawali dengan #: include, makro, dan kondisional.
Kompilasi kondisional memungkinkan Anda menyertakan atau mengecualikan blok kode berdasarkan kondisi yang dievaluasi pada tahap ini, sehingga satu sumber dapat menghasilkan build yang berbeda.
Mendefinisikan Makro
#define membuat makro. Tanpa nilai, makro tersebut hanya menjadi penanda yang dapat Anda uji nanti.
Makro yang menyerupai objek mengganti nama dengan teks; penanda hanya menunjukkan bahwa sesuatu telah ditetapkan.
#define MAX_USERS 100 /* value macro */
#define DEBUG /* flag macro */ifdef dan ifndef
#ifdef NAME mempertahankan blok hanya jika NAME telah didefinisikan. #ifndef mempertahankannya hanya jika NAME belum didefinisikan.
Di sini, pencetakan debug hanya ada dalam build debug. Tanpa DEBUG yang didefinisikan, compiler bahkan tidak pernah melihat baris tersebut.
#include <stdio.h>
#define DEBUG
int main(void) {
#ifdef DEBUG
printf("debug: starting\n");
#endif
printf("running\n");
return 0;
}if, elif, else
#if mengevaluasi ekspresi bilangan bulat konstan. Gabungkan dengan #elif dan #else untuk pemilihan multijalur.
Ini memilih kode berdasarkan makro nomor versi.
#include <stdio.h>
#define VERSION 2
int main(void) {
#if VERSION >= 2
printf("new feature on\n");
#else
printf("legacy mode\n");
#endif
return 0;
}Operator defined
Di dalam #if, Anda dapat menguji apakah suatu definisi ada dengan defined(NAME), serta menggabungkan pengujian dengan && dan ||.
Ini lebih fleksibel daripada #ifdef, yang hanya dapat menguji satu nama.
#if defined(LINUX) && !defined(EMBEDDED)
/* desktop Linux code */
#endifMendefinisikan Saat Kompilasi
Anda tidak harus menulis makro secara langsung di dalam kode. Flag -D mendefinisikannya melalui baris perintah.
Dengan cara inilah sistem build mengaktifkan atau menonaktifkan fitur tanpa mengubah sumber. -DDEBUG sama dengan menulis #define DEBUG di bagian atas setiap berkas.
gcc -DDEBUG -DVERSION=3 -o app app.cDeteksi Platform
Compiler telah mendefinisikan sebelumnya makro yang menjelaskan target. Anda menggunakannya untuk menulis kode portabel.
_WIN32— Windows (32 atau 64 bit)__linux__— Linux__APPLE__— macOS / iOS
Gunakan percabangan berdasarkan makro tersebut untuk memanggil API platform yang sesuai.
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endifPenjaga Include Header
Penggunaan klasik kondisional adalah penjaga include, yang mencegah header diproses dua kali.
Include pertama mendefinisikan makro penjaga; include berikutnya melewati isi karena makro tersebut sudah didefinisikan.
#ifndef UTILS_H
#define UTILS_H
int add(int a, int b);
#endif /* UTILS_H */Menonaktifkan Kode dengan Komentar
#if 0 ... #endif menonaktifkan sebuah blok secara andal, bahkan jika blok itu sudah berisi komentar.
Berbeda dari /* */, cara ini aman untuk komentar bertingkat, sehingga menjadi cara standar untuk mengecualikan kode sementara selama penelusuran bug.
#if 0
legacy_function(); /* disabled for now */
/* with internal comments too */
#endifMemeriksa Keluaran Prapemroses
Untuk melihat secara tepat apa yang akan dikompilasi oleh compiler, jalankan hanya prapemroses dengan -E.
Perintah ini mengembangkan semua include, makro, dan kondisional, sehingga sangat berguna ketika makro tidak berperilaku sebagaimana mestinya.
gcc -E app.c | lessPenerapan Pengaktif Fitur
Pola yang umum adalah satu header konfigurasi yang mengaktifkan atau menonaktifkan fitur untuk seluruh proyek.
Ubah satu #define, lalu setiap blok yang dilindungi di semua berkas akan merespons. Cara ini memisahkan fitur opsional dari kode inti dengan rapi.
#include <stdio.h>
#define FEATURE_LOGGING 1
int main(void) {
#if FEATURE_LOGGING
printf("logging enabled\n");
#endif
printf("app ready\n");
return 0;
}Pemeriksaan Cepat
Prediksikan perilaku definisi pada baris perintah.
Ringkasan
Sekarang Anda dapat mengendalikan kompilasi kondisional:
#ifdef/#ifndefmenguji apakah suatu makro telah didefinisikan#if/#elif/#elsemengevaluasi ekspresi konstan, bersamadefined()-DNAMEmendefinisikan makro dari baris perintah untuk mengaktifkan atau menonaktifkan fitur- Makro platform yang telah ditentukan memungkinkan kode portabel; penjaga include mencegah penyertaan ganda
Berikutnya: mengatur kode di beberapa berkas.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kompilasi Kondisional” gratis?
Ya — teks lengkap “Kompilasi Kondisional” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C Academy, upgrade ke CoddyKit PRO. Kursus C Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Kompilasi Kondisional”?
ifdef dan makro. Kamu berlatih C Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C Academy?
Tidak diperlukan pengalaman sebelumnya. C Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Kompilasi Kondisional” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C Academy ini?
Ya. Setiap pelajaran C Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Kompilasi Kondisional
- Proyek Banyak File
- Makefile
- Pustaka Statis dan Bersama