Agus Budy Wuysang wrote:
> 
> > $ cdecl explain 'const char *argv[]'
> > declare argv as array of pointer to const char
> 
> array of | pointer to | const char
>                         ^^^^^^^^^^
> char bukan pointer, const/non-const sama saja
                                      ^^^^^^
no, no... tidak sama dong :-).

$ cdecl explain 'const char *p'
declare p as pointer to const char

dengan deklarasi seperti ini, isi dari 'p' tidak bisa dirubah, mis:

  const char *p;
  p[0] = 'X';  <-- warning: assignment of read-only location
  *p = 'X';    <-- warning: assignment of read-only location

tapi var. 'p'-nya sendiri bisa dikutak-katik, mis:
  while (*p++)
    ;


> jadi = array of | pointer to char (char *argv[])
> 
> Yang menyatakan (const pointer | to something) mana?

justru itu, tidak perlu ada.
mis:
   int main(int argc, const char *argv[])
   {
      char *p = "hello world";
      argv[0] = p;  <-- tidak berbahaya
      puts(argv[0]);
      return 0;
   }

statement di atas akan mengassign isi variabel p ke argv[0]. Menurut
saya sih statement di atas nggak berbahaya (paling nggak sih nggak
akan segfault, IMO). Yang lebih berbahaya adalah kalau kita berusaha
mengcopy string ke argv[0] (misalnya, strcpy(argv[0], "hello world")).
Tapi, dengan deklarasi argv seperti di atas, statement seperti ini
akan meng-generate warning ketika di compile, jadi aman..

Sebaliknya, dengan deklarasi argv seperti di bawah ini:

  int main(int argc, char * const argv[])
  {
      strcpy(argv[0], "very very very very long string");
      return 0;
  }

program di atas akan dikompile bersih, alias tidak ada warning. Kalau
string yg. dicopy panjang sekali, program bakalan segfault.

Anyway, kalau paranoid sih kita bisa meng-const argv dua kali:

$ cdecl explain 'const char *const argv[]'
declare argv as array of const pointer to const char


cheers,
Bennylp

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

Kirim email ke