Bahasa C
Praprosesor C bukan bagian dari kompiler, tetapi merupakan langkah terpisah dalam proses kompilasi. Secara sederhana, C Preprocessor hanyalah alat substitusi teks dan menginstruksikan kompiler untuk melakukan pra-pemrosesan yang diperlukan sebelum kompilasi yang sebenarnya. Kami akan merujuk ke C Preprocessor sebagai CPP.
Semua perintah praprosesor dimulai dengan simbol hash (#). Itu harus karakter nonblank pertama, dan agar mudah dibaca, direktif preprocessor harus dimulai di kolom pertama. Bagian berikut mencantumkan semua arahan preprosesor yang penting
No.Pr. | Petunjuk &Deskripsi |
---|---|
1 | #define Mengganti makro praprosesor. |
2 | #sertakan Menyisipkan header tertentu dari file lain. |
3 | #undef Tidak menentukan makro praprosesor. |
4 | #ifdef Mengembalikan nilai true jika makro ini ditentukan. |
5 | #ifndef Mengembalikan nilai true jika makro ini tidak ditentukan. |
6 | #jika Menguji apakah kondisi waktu kompilasi benar. |
7 | #else Alternatif untuk #if. |
8 | #elif #else dan #if dalam satu pernyataan. |
9 | #endif Mengakhiri kondisi praprosesor. |
10 | #kesalahan Mencetak pesan kesalahan di stderr. |
11 | #pragma Mengeluarkan perintah khusus ke compiler, menggunakan metode standar. |
Analisis contoh berikut untuk memahami berbagai arahan.
#define MAX_ARRAY_LENGTH 20
Arahan ini memberi tahu CPP untuk mengganti instance MAX_ARRAY_LENGTH dengan 20. Gunakan #define untuk konstanta untuk meningkatkan keterbacaan.
#include <stdio.h> #include "myheader.h"
Arahan ini memberi tahu CPP untuk mendapatkan stdio.h dari Perpustakaan Sistem dan tambahkan teks ke file sumber saat ini. Baris berikutnya memberitahu CPP untuk mendapatkan myheader.h dari direktori lokal dan tambahkan konten ke file sumber saat ini.
#undef FILE_SIZE #define FILE_SIZE 42
Ini memberitahu CPP untuk tidak mendefinisikan FILE_SIZE yang ada dan mendefinisikannya sebagai 42.
#ifndef MESSAGE #define MESSAGE "You wish!" #endif
Ini memberitahu CPP untuk mendefinisikan MESSAGE hanya jika MESSAGE belum ditentukan.
#ifdef DEBUG /* Your debugging statements here */ #endif
Ini memberitahu CPP untuk memproses pernyataan terlampir jika DEBUG didefinisikan. Ini berguna jika Anda lulus -DDEBUG tandai ke kompiler gcc pada saat kompilasi. Ini akan menentukan DEBUG, sehingga Anda dapat mengaktifkan dan menonaktifkan debugging dengan cepat selama kompilasi.
ANSI C mendefinisikan sejumlah makro. Meskipun masing-masing tersedia untuk digunakan dalam pemrograman, makro yang telah ditentukan sebelumnya tidak boleh dimodifikasi secara langsung.
No.Pr. | Makro &Deskripsi |
---|---|
1 | __DATE__ Tanggal saat ini sebagai literal karakter dalam format "MMM DD YYYY". |
2 | __TIME__ Waktu saat ini sebagai literal karakter dalam format "HH:MM:SS". |
3 | __FILE__ Ini berisi nama file saat ini sebagai string literal. |
4 | __LINE__ Ini berisi nomor baris saat ini sebagai konstanta desimal. |
5 | __STDC__ Didefinisikan sebagai 1 ketika compiler sesuai dengan standar ANSI. |
Mari kita coba contoh berikut
Demo Langsung#include <stdio.h> int main() { printf("File :%s\n", __FILE__ ); printf("Date :%s\n", __DATE__ ); printf("Time :%s\n", __TIME__ ); printf("Line :%d\n", __LINE__ ); printf("ANSI :%d\n", __STDC__ ); }
Ketika kode di atas dalam file test.c dikompilasi dan dieksekusi, menghasilkan hasil berikut
File :test.c Date :Jun 2 2012 Time :03:36:24 Line :8 ANSI :1
Praprosesor C menawarkan operator berikut untuk membantu membuat makro −
Makro biasanya terbatas pada satu baris. Operator kelanjutan makro (\) digunakan untuk melanjutkan makro yang terlalu panjang untuk satu baris. Misalnya
#define message_for(a, b) \ printf(#a " and " #b ": We love you!\n")
Operator stringize atau number-sign ( '#' ), ketika digunakan dalam definisi makro, mengubah parameter makro menjadi konstanta string. Operator ini hanya dapat digunakan dalam makro yang memiliki argumen atau daftar parameter tertentu. Misalnya
Demo Langsung#include <stdio.h> #define message_for(a, b) \ printf(#a " and " #b ": We love you!\n") int main(void) { message_for(Carole, Debra); return 0; }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
Carole and Debra: We love you!
Operator penempelan token (##) dalam definisi makro menggabungkan dua argumen. Ini memungkinkan dua token terpisah dalam definisi makro untuk digabungkan menjadi satu token. Misalnya
Demo Langsung#include <stdio.h> #define tokenpaster(n) printf ("token" #n " = %d", token##n) int main(void) { int token34 = 40; tokenpaster(34); return 0; }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
token34 = 40
Itu terjadi karena contoh ini menghasilkan output aktual berikut dari praprosesor
printf ("token34 = %d", token34);
Contoh ini menunjukkan penggabungan token##n menjadi token34 dan di sini kita telah menggunakan keduanya stringize dan menempelkan token .
Praprosesor didefinisikan operator digunakan dalam ekspresi konstan untuk menentukan apakah pengidentifikasi didefinisikan menggunakan #define. Jika pengidentifikasi yang ditentukan ditentukan, nilainya benar (bukan nol). Jika simbol tidak didefinisikan, nilainya salah (nol). Operator yang ditentukan ditentukan sebagai berikut
Demo Langsung#include <stdio.h> #if !defined (MESSAGE) #define MESSAGE "You wish!" #endif int main(void) { printf("Here is the message: %s\n", MESSAGE); return 0; }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
Here is the message: You wish!
Salah satu fungsi CPP yang kuat adalah kemampuan untuk mensimulasikan fungsi menggunakan makro parameter. Misalnya, kita mungkin memiliki beberapa kode untuk mengkuadratkan angka sebagai berikut −
int square(int x) { return x * x; }
Kita dapat menulis ulang kode di atas menggunakan makro sebagai berikut −
#define square(x) ((x) * (x))
Makro dengan argumen harus didefinisikan menggunakan #define direktif sebelum dapat digunakan. Daftar argumen diapit dalam tanda kurung dan harus segera mengikuti nama makro. Spasi tidak diperbolehkan antara nama makro dan kurung buka. Misalnya
Demo Langsung#include <stdio.h> #define MAX(x,y) ((x) > (y) ? (x) : (y)) int main(void) { printf("Max between 20 and 10 is %d\n", MAX(10, 20)); return 0; }
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut
Max between 20 and 10 is 20
Bahasa C
C# untuk loop Pada artikel ini, kita akan belajar tentang for loop dalam C# dan berbagai cara menggunakannya dalam sebuah program. Dalam pemrograman, seringkali diinginkan untuk mengeksekusi blok pernyataan tertentu untuk beberapa kali tertentu. Solusi yang mungkin adalah mengetikkan pernyataan-pe
C# Array Multidimensi Dalam tutorial ini, kita akan belajar tentang array multidimensi dalam C# menggunakan contoh array dua dimensi. Sebelum kita mempelajari tentang array multidimensi, pastikan untuk mengetahui tentang array satu dimensi di C#. Dalam array multidimensi, setiap elemen array juga
C# foreach loop Dalam artikel ini, kita akan belajar tentang foreach loop (alternatif untuk for loop) dan cara menggunakannya dengan array dan koleksi. C# menyediakan alternatif yang mudah digunakan dan lebih mudah dibaca untuk loop for, loop foreach saat bekerja dengan array dan koleksi untuk ber
C Praprosesor dan Makro Dalam tutorial ini, Anda akan diperkenalkan dengan c preprocessors, dan Anda akan belajar menggunakan kompilasi #include, #define dan conditional dengan bantuan contoh. Preprosesor C adalah praprosesor makro (memungkinkan Anda untuk menentukan makro) yang mengubah program