Kamis, 07 Oktober 2010

Preprocessor

Preprocessor

Jika diartikan kedalam bahasa indonesia Pre- artinya sebelum dan Processor- artinya pemroses. Didalam bahasa pemrograman C/C++ Preprocessor adalah proses yang dilakukan sebelum program di kompilasi. Preprocessor biasa digunakan untuk menuliskan sebuah makro, penggunaan pustaka (library), kompilasi berkondisi (conditional compiling), error generation, pragma.

Didalam bahasa pemrograman C/C++ terdapat beberapa Preprocessor yang dapat digunakan untuk melakukan suatu pekerjaan :

Penulisan Makro dan Pendefinisian konstan

   #define
   #undef

direktif preprocessing #define dan #undef dapat digunakan sebagai pendefinisian nilai tertentu.Identifier ini dapat berupa konstan atau funsi makro.

syntax:
    #define identifier replacement
    #undef  identifier

Identifier yang didefinisikan dengan #define akan terbaca atau dapat diakses didalam source code sampai dengan bertemu #undef

contoh:

#include <iostream.h>
#include <conio.h>

#define KONSTAN 99

main()
{
    cout << "nilai KONSTAN = " << KONSTAN;
    getch();
}


Fungsi makro
Sebuah fungsi makro dapat didefinisikan dengan #define dengan format sebagai berikut

syntax:

    #define identifier(parameter-list) (replacement-text)       

contoh:

#include <iostream.h>
#include <conio.h>

#define VOLUME_KUBUS(s) (s)*(s)*(s)

main()
{
    int n;
    int vol;

    cout << "masukan sisi kubus : ";
    cin >> n;

    vol = VOLUME_KUBUS(n);
    cout << "volume kubus dengan sisi " << n << " = " << vol;

    getch();
}


File inclusion untuk menggunakan pustaka

    #include

direktif #include dapat digunakan untuk header file eksternal yang akan diproses oleh compiler

syntax:

    #include <header-file>
                               atau
    #include "header-file"

contoh:

#include <iostream.h>
#include <conio.h>

main()
{
    cout << "menggunakan file header dari iostream libraries\n";
    getch();
}


Kompilasi berkondisi (conditional compiling)

    #if
    #else
    #endif
    #ifdef
    #ifndef
    #elif
    #if defined
    #if !defined

Preprocessor di atas digunakan untuk mengontrol bagaimana source code program akan dikompilasi

Syntax:
    #if constant_expression
    #else
    #endif

    atau

    #if constant_expression
    #elif constant_expression
    #endif


    #ifdef identifier
    #else atau #elif
    #endif

    #ifndef identifier
    #else atau #elif
    #endif


    #ifdef identifier sama seperti menggunakan #if defined(identifier)
    #ifndef identifier sama seperti menggunaka #if !defined(identifier)

Compiler hanya mengkompilasi code setelah ekspresi #if jika constant_expression menghasilakan nilai tidak nol (true). Jika nilai adalah 0 (false), maka compiler akan mengabaikan baris kode sampai bertemu dengan #else, #elif, atau #endif. Direktif #ifdef dan #ifndef dapat digunakan untuk kompilasi berkondisi dari beberapa baris kode berdasarkan sudah atau belumnya identifier didefinisikan

contoh:

#include <iostream.h>
#include <conio.h>

main()
{
    #if 1
        cout << "YuuuHuuuu\n";
    #else
        cout << "Blink_Blink\n";
    #endif

    getch();
}

Jika nilai setelah #if diganti dengan 0 maka yang akan tampil kata Blink_Blink


#include <iostream.h>
#include <conio.h>

#define BAKPAO

main()
{
    
    cout << "makan mie ayam"

    #ifdef BAKPAO
        cout << " tambah bakpao";
    #endif

    getch();
}

Jika definisi BAKPAO di beri comment maka yang akan tampil adalah kata "makan mie ayam"


Error generating

direktif #error akan menghentikan proses kompilasi dan akan menampilkan pesan error

Syntax:

    #error message

contoh:

//#define JALAN
#ifndef JALAN
#error kompilasi dibatalkan karena kondisi tidak terpenuhi
#endif

#include <iostream.h>

main()
{

    // tidak melakukan apa-apa
}

Hilangkan comment pada definisi #define JALAN untuk mengkompile


Referensi
http://en.wikipedia.org/wiki/C_preprocessor
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/1.7.html

C Programming Language (ANSI C) K&R


Kelompok_12:
Ennos Mattan Manalu   : 12108849
Nurulirfan                     : 12107065
Tukiyat                        : 12108345
Irfan Fahmi                   : 12108259
Hendri Baskoro             : 12106014