Penyusunan Bersyarat
ifdef dan makro
Penyusunan Bersyarat ialah pelajaran C Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C Academy merangkumi sejumlah 4 pelajaran.
Prapemproses
Sebelum pengkompil melihat kod Anda, prapemproses akan dijalankan. Prapemproses mengendalikan setiap baris yang bermula dengan #: kemasukan, makro dan syarat.
Penyusunan bersyarat membolehkan Anda memasukkan atau mengecualikan blok kod berdasarkan syarat yang dinilai pada peringkat ini, lalu menghasilkan binaan yang berbeza daripada satu sumber.
Mentakrifkan Makro
#define mencipta makro. Tanpa nilai, makro itu hanyalah bendera yang boleh Anda uji kemudian.
Makro yang menyerupai objek menggantikan nama dengan teks; bendera hanya menandakan bahawa sesuatu telah ditetapkan.
#define MAX_USERS 100 /* value macro */
#define DEBUG /* flag macro */ifdef dan ifndef
#ifdef NAME mengekalkan blok hanya jika NAME ditakrifkan. #ifndef mengekalkannya hanya jika NAME tidak ditakrifkan.
Di sini, cetakan nyahpepijat hanya wujud dalam binaan nyahpepijatan. Tanpa DEBUG ditakrifkan, pengkompil tidak pernah melihat baris itu.
#include <stdio.h>
#define DEBUG
int main(void) {
#ifdef DEBUG
printf("debug: starting\n");
#endif
printf("running\n");
return 0;
}if, elif, else
#if menilai ungkapan integer malar. Gabungkan dengan #elif dan #else untuk pemilihan berbilang laluan.
Ini memilih kod berdasarkan makro nombor 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 boleh menguji takrifan dengan defined(NAME), dan menggabungkan ujian dengan && serta ||.
Kaedah ini lebih fleksibel daripada #ifdef, yang hanya boleh menguji satu nama.
#if defined(LINUX) && !defined(EMBEDDED)
/* desktop Linux code */
#endifMentakrifkan Semasa Penyusunan
Anda tidak perlu menetapkan makro secara keras. Bendera -D mentakrifkannya pada baris perintah.
Beginilah sistem binaan menukar ciri tanpa menyunting sumber. -DDEBUG sama seperti #define DEBUG pada bahagian atas setiap fail.
gcc -DDEBUG -DVERSION=3 -o app app.cPengesanan Platform
Pengkompil mentakrifkan terlebih dahulu makro yang menerangkan sasaran. Anda menggunakannya untuk menulis kod mudah alih.
_WIN32— Windows (32 atau 64 bit)__linux__— Linux__APPLE__— macOS / iOS
Buat percabangan berdasarkan makro ini untuk memanggil API platform yang betul.
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endifPengawal Kemasukan Pengepala
Penggunaan klasik syarat ialah pengawal kemasukan, yang menghalang pengepala daripada diproses dua kali.
Kemasukan pertama mentakrifkan makro pengawal; kemasukan seterusnya melangkau isi kerana makro itu sudah ditakrifkan.
#ifndef UTILS_H
#define UTILS_H
int add(int a, int b);
#endif /* UTILS_H */Menyahaktifkan Kod dengan Komen
#if 0 ... #endif menyahaktifkan satu blok dengan boleh dipercayai, termasuk blok yang sudah mengandungi komen.
Tidak seperti /* */, kaedah ini menyokong sarang dengan selamat, jadi inilah cara standard untuk mengecualikan kod buat sementara semasa nyahpepijatan.
#if 0
legacy_function(); /* disabled for now */
/* with internal comments too */
#endifMemeriksa Keluaran Prapemproses
Untuk melihat dengan tepat perkara yang akan disusun oleh pengkompil, jalankan prapemproses sahaja dengan -E.
Perintah ini mengembangkan semua kemasukan, makro dan syarat, yang amat berguna apabila makro tidak berfungsi seperti yang dijangka.
gcc -E app.c | lessTogol Ciri dalam Amalan
Corak yang biasa digunakan ialah satu pengepala konfigurasi yang menghidupkan atau mematikan ciri untuk seluruh projek.
Tukar satu #define dan setiap blok yang dilindungi merentas semua fail akan bertindak balas. Ini memastikan ciri pilihan terpisah dengan kemas daripada kod teras.
#include <stdio.h>
#define FEATURE_LOGGING 1
int main(void) {
#if FEATURE_LOGGING
printf("logging enabled\n");
#endif
printf("app ready\n");
return 0;
}Semakan Pantas
Ramalkan tingkah laku takrifan baris perintah.
Ringkasan
Kini Anda boleh mengawal penyusunan bersyarat:
#ifdef/#ifndefmenguji sama ada makro ditakrifkan#if/#elif/#elsemenilai ungkapan malar, bersamadefined()-DNAMEmentakrifkan makro daripada baris perintah untuk menukar ciri- Makro platform yang ditakrifkan terlebih dahulu membolehkan kod mudah alih; pengawal kemasukan menghalang kemasukan berganda
Seterusnya: menyusun kod merentas berbilang fail.
Pelajari C dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 39
- Pelajaran
- 144
Soalan Lazim
Adakah pelajaran “Penyusunan Bersyarat” percuma?
Ya — teks penuh “Penyusunan Bersyarat” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus C Academy, tingkat taraf kepada CoddyKit PRO. Kursus C Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Penyusunan Bersyarat”?
ifdef dan makro Anda berlatih C Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Penyusunan Bersyarat” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C Academy ini?
Ya. Setiap pelajaran C Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Penyusunan Bersyarat
- Projek Berbilang Fail
- Makefiles
- Pustaka Statik dan Dikongsi