Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

C - Praprosesor

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.

Contoh Praprosesor

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.

Makro yang telah ditentukan sebelumnya

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

Operator Praprosesor

Praprosesor C menawarkan operator berikut untuk membantu membuat makro −

Operator Kelanjutan 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 (#)

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 Token Paste (##)

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 .

Operator yang Ditetapkan()

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!

Makro Berparameter

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

  1. C# Hello World - Program C# Pertama Anda
  2. C# Kata Kunci dan Pengidentifikasi
  3. Variabel C# dan Tipe Data (Primitif)
  4. C# Operator
  5. C# Bitwise dan Bit Shift Operator
  6. C# Input dan Output Dasar
  7. C# Ekspresi, Pernyataan, dan Blok (Dengan Contoh)
  8. C# Komentar
  9. Pernyataan sakelar C#
  10. C# ternary (? :) Operator