Daniel Baktiar wrote:
> intinya macro ini dapat digunakan untuk menyederhanakan penulisan --
> tidak berhubungan dengan isu efisiensi.
> tetapi ada juga kekurangannya, karena dengan menggunakan macro lebih
> sulit untuk melakukan debugging jika menggunakan step / breakpoint,

Betul.  Selain itu side effects-nya perlu diperhatikan. Contoh:

#define MYMACRO(a, b) a + a * b

int main()
{

        printf("Result: %d\n", MYMACRO( 5   , 3) );
        printf("Result: %d\n", MYMACRO( 2+3 , 3) );
}

Yang pertama hasil-nya: 20. printf kedua hasilnya 16.
Kenapa?

Coba lihat statement yang di-generate oleh preprocessor dengan:
        gcc -E filename.c

# 1 "a.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "a.c"


int main()
{

        printf("Result: %d\n", 5 + 5 * 3 );
        printf("Result: %d\n", 2+3 + 2+3 * 3 );
}

> karena tidak jelas bagian source code mana yang menghasilkan breakpoint
> (pada hasil kompilasi macro telah di-expand, sedang pada source code
> tidak). jadi macro sebaiknya digunakan untuk mempermudah pembacaan dan
> untuk portabilitas (digabungkan preprocessor dengan #ifdef / #define /
> #undef / etc.), tetapi jangan over-use.

Setuju.  Reading-nya juga bisa lebih sulit.

Tetapi, macro merupakan suatu tool yang sangat berguna jika digunakan
secara hati-hati.

Kannel project menggunakan macro preprocessor trick untuk mendefinisikan
PDU. Lars Wirzenius menulis artikel yang sangat bagus ttg hal ini; dapat
dilihat di:
        http://liw.iki.fi/liw/texts/cpp-trick.html


-- 
Rachman Chavik
email: [EMAIL PROTECTED]
email: [EMAIL PROTECTED]
email: [EMAIL PROTECTED]
www: http://www.chavik.com

-- 
Berhenti langganan: [EMAIL PROTECTED]
Arsip dan info: http://linux.or.id/milis

Kirim email ke