Terima kasih pada semuanya yang udah membantu ... Kebetulan saya lagi tidak pakai GNU C. Jadi macro dengan jumlah argumen variabel --seperti kata mas Eko-- nggak bisa digunakan.
Yusron > -----Original Message----- > From: Eko Bono [mailto:[EMAIL PROTECTED]] > Sent: Wednesday, April 24, 2002 7:35 PM > To: [EMAIL PROTECTED] > Subject: Re: [programming] macro utk ... di C > > > --- Haris Fauzi <[EMAIL PROTECTED]> schrieb: > Nyontek dari glib.h, > deklarasi g_error: > > > > #ifdef USE_ZIP > > #define e_printf(_phandle, _fmt, args...) > > egz_printf(egz,_phandle,_fmt,##args) > > #endif > > > Sekedar nambahin: > > Alternativ yg lebih simple adalah: > > #define e_printf(X) egz_printf X > > Namun di sini, Anda musti menambahkan extra tanda kurung buka dan > penutup. Contohnya: > e_printf((...)); > > Di bawah cuplikan ttg preprocessing directive: > > Secara umum preprocessing directive #define mempunyai > bentuk: > #define identifier [replacement-list] > yang mendefinisikan identifier sebagai nama macro yang akan > mempresentasikan replacement-list. > > Macro dapat juga dipakai dengan menggunakan paramater. Macro demikian > mempunyai sintaks: > #define identifier( [identifier-list] ) [replacement-list] > Di sini macro identifier mempunyai parameter identifier-list > yang berada dalam tanda kurung. Tanda kurung pembuka "(" harus ditulis > langsung di belakang macro, tidak boleh ada white space. > > Macro dengan operator # > ------------------------ > > Jika parameter dari macro digunakan dengan awalan operator #, maka pada > awal dan akhir dari parameter tersebut akan ditambahkan karakter > double-quote " " untuk menghasilkan sebuah string. Contohnya: > > #include<stdio.h> > #define display(arg) printf(#arg) //define the macro > int main() > { > display(any string you want to use); //use the macro > } > akan menghasilkan > int main() > { > printf("any string you want to use"); //use the macro > } > > Operator ## digunakan pada macro untuk menghasilkan sebuah string yang > terdiri dari dua kata yang biasanya dilewatkan sebagai parameter dari > macro. Contoh berikut mengilustrasikan proses tersebut: > > #define concat(arg1,arg2) arg1##arg2 > int main() > { > int concat(fire,fly); > concat(fire,fly) = 1; > printf("%d \n",concat(fire,fly)); > } > akan menghasilkan > int main() > { > int firefly ; > firefly = 1; > printf("%d \n",firefly ); > } > > Di GNU C ada beberapa fitur tambahan yang tidak didapatkan di C > standard ANSI. Salah satunya adalah macro dengan jumlah argumen yang > variabel. > Untuk menggunakannya Anda harus mendefinisikan dengan argumen args... > (penting di sini adalah tiga titik setelah argumen args, nama argumen > sendiri bebas). Sebagai contoh: > #define e_printf(format, args...) printf(format , ## args) > > Tanda ## di atas tidak harus digunakan selama Anda yakin bahwa argumen > args yang diberikan ke e_printf lebih atau sama dengan 1. Kita lihat > ilustrasi berikut: > #define e_printf1(format, args...) printf(format , ## args) > #define e_printf2(format, args...) printf(format , args) > > Bila kita panggil tanpa argument args: > e_printf1("Hallo"); > akan menghasilkan > printf("Hallo"); > Statement di atas tidak salah. Sekarang kita perhatikan pada macro > kedua: > e_printf2("Hallo"); > akan menghasilkan > printf("Hallo",); > Sintaks di atas adalah salah menurut C, karena ada tanda , nya. > Sedang jika kita memanggil macro ke dua dengan argument args seperti: > e_printf2("%s", "Hallo"); > maka akan menghasilkan sintaks yang benar: > printf("%s", "Hallo"); > > Eko > e_prin > -- Utk berhenti langganan, kirim email ke [EMAIL PROTECTED] Informasi arsip di http://www.linux.or.id/milis.php3
