--- 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

__________________________________________________________________

Gesendet von Yahoo! Mail - http://mail.yahoo.de
Sie brauchen mehr Speicher f�r Ihre E-Mails? - http://premiummail.yahoo.de

-- 
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3

Kirim email ke