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