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

Kirim email ke