Preprocessor Bahasa C

Assalamu'alaikum poinreaders,
Pada kesempatan kali ini kita akan belajar materi mengenai Bahasa C, yaitu tentang preprocessor pada bahasa pemrograman C. Oke langsung saja simak ulasan berikut...

Preprocessor Bahasa C

Preprocessor bukanlah bagian dari sebuah compiler, tetapi merupakan sebuah proses yang dilakukan sebelum program di kompilasi oleh compiler. Semua perintah preprocessor diawali dengan simbol hash (#). Perintah-perintah pada preprocessor terbagi menjadi beberapa bagian, diantaranya yaitu:

1. #include

#include digunakan untuk memberitahu preprocessor untuk menyisipkan isi file lain ke kode program kita pada titik tertentu.

Format Penulisan:
#include "nama_file"
atau
#include <nama_file>

Ket:
Jika nama_file di dalam tanda <> maka preprocessor akan mencari direktori yang telah ditentukan untuk mencari nama_file tersebut. Sedangkan jika nama_file di dalam tanda " " maka preprocessor akan mencari nama_file di direktori yang sama dengan file kode program kita.

Contoh Penulisan :
#include <stdio.h>

int main()
{
    printf("www.pointopoin.com");
    getch();
    return 0;
}

Output :
preprocessor #include

Gambar 1. Preprocessor #include

2. #define

#define digunakan untuk mendefinisikan sebuah makro pada kode program kita. Makro memiliki arti yang sama dengan fungsi, namun dari segi waktu, makro diproses lebih cepat dan dari cara penulisannya pun juga lebih sederhana dari pada fungsi. Pada umumnya nilai konstanta pada makro yang telah didefinisikan hanya dapat bernilai angka, string atau sebuah ekspresi. Makro yang didefinisikan bukanlah sebuah variabel dan juga tidak dapat diubah oleh kode program seperti halnya merubah sebuah variabel biasa.

Format Penulisan:
#define nama_makro nilai_konstanta

Contoh Penulisan :
#include <stdio.h>

#define alamat_web "www.pointopoin.com"

int main()
{
   printf("Alamat website pointopoin : %s", alamat_web);
   getch();
   return 0;
}

Output :
Preprocessor #define
Gambar 2. Preprocessor #define

3. #undef

#undef digunakan untuk memberitahu preprocessor untuk menghapus semua makro tertentu yang telah didefinisikan. Sebuah makro dapat didefinisikan ulang setelah makro tersebut dihapus oleh #undef.

Format Penulisan:
#undef nama_makro

Contoh Penulisan :
#include <stdio.h>

#define alamat_web "www.pointopoin.com"
#undef alamat_web

int main()
{
   #ifdef alamat_web
   printf("Alamat website pointopoin : %s\n", alamat_web);
   #endif

   printf("Terimakasih!");
   getch();
   return 0;
}

Output:
Preprocessor #undef
Gambar 3. Preprocessor #undef

4. #if

#if digunakan untuk menentukan apakah kode berikutnya harus disertakan dalam proses kompilasi atau tidak.

Format Penulisan:
#if ekspresi_konstanta

Contoh Penulisan :
#include <stdio.h>

#define alamat_web 1

int main()
{
   #if alamat_web
   printf("Alamat website pointopoin : www.pointopoin.com\n");
   #endif

   printf("Terimakasih!");
   getch();
   return 0;
}

Output :
Preprocessor #if
Gambar 4. Preprocessor #if

5. #ifdef

#ifdef digunakan untuk menentukan apakah makro yang tersedia ada sebelum kode berikutnya dimasukan kedalam proses kompilasi.

Format Penulisan:
#ifdef nama_makro

Contoh Penulisan :
#include <stdio.h>

#define alamat_web "www.pointopoin.com"

int main()
{
   #ifdef alamat_web
   printf("Alamat website pointopoin : %s\n", alamat_web);
   #endif

   printf("Terimakasih!");
   getch();
   return 0;
}

Output :
Preprocessor #ifdef
Gambar 5. Preprocessor #ifdef

6. #ifndef

#ifndef digunakan untuk menentukan apakah makro yang tersedia tidak ada sebelum kode berikutnya dimasukan ke dalam proses kompilasi.

Format Penulisan:
#ifndef nama_makro

Contoh Penulisan :
#include <stdio.h>

#define alamat_web "www.pointopoin.com"
#ifndef alamat_web
#define alamat_web 1
#endif

int main()
{
   printf("Alamat website pointopoin : %s\n", alamat_web);
   getch();
   return 0;
}

Output :
Preprocessor #ifndef
Gambar 6. Preprocessor #ifndef

7. #else

#else memberikan tindakan alternatif pada kondisi #if, #ifdef, atau #ifndef. Kode program akan disertakan setelah pernyataan else ketika kondisi #if, #ifdef, atau #ifndef bernilai false.

Format Penulisan:
#else

Contoh Penulisan :
#include <stdio.h>

#define nilai 90

int main()
{
   #if nilai < 60
   printf("Tidak Lulus.\n");
   #else
   printf("Lulus dengan nilai %d", nilai);
   #endif

   getch();
   return 0;
}

Output :
Preprocessor #else
Gambar 7. Preprocessor #else

8. #elif

#elif menyediakan suatu tindakan alternatif pada kondisi #if, #ifdef, atau #ifndef. Kode program akan disertakan setelah pernyataan #elif ketika kondisi sebelumnya #if, #ifdef atau #ifndef bernilai false dan kondisi #elif bernilai true. Kondisi #elif merupakan penyederhanaan dari kondisi #else if.

Format Penulisan:
#elif ekspresi_konstanta

Contoh Penulisan :
#include <stdio.h>

#define nilai 90

int main()
{
   #if nilai >= 60
   printf("Lulus");
   #elif nilai < 60
   printf("Tidak Lulus");
   #endif

   getch();
   return 0;
}

Output :
Preprocessor #elif
Gambar 8. Preprocessor #elif

9. #endif

#endif digunakan untuk menutup kondisi #if, #ifdef, atau #ifndef.

Format Penulisan:
#endif

Contoh Penulisan :
#include <stdio.h>

#define alamat_web "www.pointopoin.com"

int main()
{
   #ifdef alamat_web
   printf("Alamat website pointopoin : %s\n", alamat_web);
   #endif

   printf("Terimakasih!");
   getch();
   return 0;
}

Output :
Preprocessor #endif
Gambar 9. Preprocessor #endif

10. #error

#error menyebabkan proses kompilasi berhenti di lokasi di mana perintah #error ditemui. Jika dijumpai #error, maka pesan error akan keluar sebelum proses kompilasi berhenti.

Format Penulisan:
#error pesan

Contoh Penulisan :
#include <stdio.h>
#include <limits.h>

#define nilai 50

int main()
{

   #if nilai <= 60
   #error Maaf anda tidak lulus ujian
   #endif

   printf("Selamat, Anda Lulus Ujian");
   getch();
   return 0;
}

Output :
Preprocessor #error
Gambar 10. Preprocessor #error

11. #line

#line digunakan untuk mengubah isi dari _LINE_ dan _FILE_ yang telah ditentukan pada compiler.

Format Penulisan:
#line number
atau
#line number "nama_file"
atau
#line ekspresi_preprocessing

Contoh Penulisan :
#include <stdio.h>

int main()
{
   fungsi_1();
   fungsi_2();
   getch();
}

#line 100
fungsi_1()
{
   printf("fungsi_1 berada pada baris kode ke-%d\n",__LINE__);
}

#line 200
fungsi_2()
{
   printf("fungsi_2 berada pada baris kode ke-%d\n",__LINE__);
}

Output :
Preprocessor #line
Gambar 11. Preprocessor #line

12. #pragma

#pragma adalah sebuah instruksi yang telah didefinisikan implementasinya, yang memungkinkan suatu variasi instruksi yang diberikan pada compiler. Fungsi #pragma ini tidak support pada compiler gcc terbaru.

Tabel Pragma:
Nama Pragma Keterangan
startup menjalankan fungsi sebelum fungsi main()
exit menjalankan fungsi sesudah fungsi main()
warn menampilkan peringatan (warning) pada program
option menentukan daftar pilihan compiler yang akan diproses
inline menentukan bahwa fungsi C harus sebaris (inline)
argsused menonaktifkan pesan peringatan (warning)
hdrfile -
hdrstop mengakhiri daftar header file yang memenuhi syarat untuk precompilation
saveregs -

Format Penulisan:
#pragma nama_pragma instruksi

Contoh Penulisan :
#include<stdio.h>

void fungsi_1();
void fungsi_2();

#pragma startup fungsi_1
#pragma exit fungsi_2

void main(){
printf("Ini adalah main()\n");
getch();
}

void fungsi_1(){
printf("Ini adalah fungsi_1()\n");
getch();
}

void fungsi_2(){
printf("Ini adalah fungsi_2()\n");
getch();
}

Output :
Preprocessor #pragma
Gambar 12. Preprocessor #pragma

Predefined Makro

ANSI C mendefinisikan sejumlah makro. Meskipun masing-masing tersedia untuk digunakan dalam pemrograman, makro yang telah ditetapkan tidak boleh diubah secara langsung.

Tabel makro:
Makro Keterangan
__DATE__ menampilkan tanggal saat ini dalam format "MMM DD YYYY"
__TIME__ menampilkan waktu saat ini dalam format ""HH:MM:SS"
__FILE__ menampikan file saat ini
__LINE__ menampilkan jumlah baris dalam format desimal
__STDC__ implementasi penyesuain standar, menampilkan konstanta desimal 1

Format Penulisan:
__nama-makro-predefine__

Contoh Penulisan :
#include <stdio.h>

main() {

   printf("File    :%s\n", __FILE__ );
   printf("Tanggal :%s\n", __DATE__ );
   printf("Waktu   :%s\n", __TIME__ );
   printf("Baris   :%d\n", __LINE__ );
   printf("ANSI    :%d\n", __STDC__ );

   getch();

}

Output :
Predefined Makro
Gambar 13. Predefined Makro

Operator Processor # dan ##

ANSI C menyediakan 2 operator processor, yaitu # dan ##. Operator # digunakan pada makro #define, operator # akan mengubah parameter makro menjadi string konstan. Sedangkan operator ## untuk menggabungkan dua argumen.

Format Penulisan #:
#define nama_makro #nama_parameter

Format Penulisan ##:
#define nama_makro nama_parameter_1 ## nama_parameter_2

Contoh Penulisan:
#include <stdio.h>

#define nama_lengkap(nama) #nama
#define nilai(a, b) a ## b

int main(void) {

    int xy = 90;

    printf("Nama : %s\n", nama_lengkap(Denis Julianto));
    printf("Nilai : %d", nilai(x, y));

    getch();
    return 0;
}

Output :
Operator # dan ##
Gambar 14. Operator # dan ##

Operator Processor \

Sebuah makro biasanya terbatas pada satu baris. Operator \ digunakan untuk melanjutkan makro yang terlalu panjang untuk satu baris.

Format Penulisan:
\

Contoh Penulisan:
#include <stdio.h>

#define alamat_web(link) \
printf("Alamat website pointopoin : %s", #link)

int main(void) {
    alamat_web(www.pointopoin.com);
    getch();
    return 0;
}

Output :
Operator \
Gambar 15. Operator \

Operator Processor defined()

Operator ini digunakan dalam ekspresi konstan untuk menentukan apakan sebuah identifier didefinisikan menggunakan #define. Jika identifier yang ditentukan sudah didefinisikan, makan akan bernilai benar (true), sedangkan jika tidak didefinisikan, maka bernilai palsu (false).

Format Penulisan:
defined(nama_makro)

Contoh Penulisan:
#include <stdio.h>

#if !defined (PESAN)
   #define PESAN "Ini adalah sebuah pesan!"
#endif

int main(void) {
   printf("%s", PESAN);
   getch();
   return 0;
}

Output :
Operator Preprocessor defined()
Gambar 16. Operator Preprocessor defined()


Semoga materi yang saya sampaikan tentang Bahasa C kali ini dapat dipahami sobat poinreaders. Silahkan tulis pertanyaan seputar materi yang telah dibahas pada kolom komentar. jangan lupa follow akun sosial kami agar poinreaders bisa mendapatkan materi terbaru tentang bahasa pemrograman lainnya.

Share this

Related Posts

Previous
Next Post »