GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menghapus peringatan ini:parameter kedua 'va_start' bukan argumen yang disebutkan terakhir?

Anda perlu menggunakan size bukannya fmt :

va_start(args, size);

Ini adalah size , bukan fmt , itu adalah parameter terakhir yang memiliki nama eksplisit (berlawanan dengan parameter vararg, yang tidak memiliki nama). Anda harus meneruskan parameter bernama terakhir ke va_start agar dapat mengetahui alamat di memori tempat parameter vararg dimulai.


second parameter of ‘va_start’ not last named argument

Apa artinya dan bagaimana cara menghapusnya?

Fungsi Anda telah menamai parameter parent , fmt dan size . Spesifikasi C mengatakan Anda harus selalu meneruskan parameter bernama terakhir ke va_start , untuk kompatibilitas dengan kompiler lama. Jadi, Anda harus melewati size , bukan fmt .

(Tetapi dengan kompiler modern, ini mungkin tetap berfungsi)


Saya pikir ada kebingungan di sini:kebanyakan orang hanya berurusan dengan fungsi seperti prinf yang memiliki format dan varargs. dan mereka pikir mereka harus memberikan nama parameter yang menjelaskan format. namun va_start tidak ada hubungannya dengan format seperti printf apa pun. ini hanyalah fungsi yang menghitung offset pada tumpukan tempat parameter tanpa nama dimulai.


Linux
  1. Bagaimana Mengurutkan Du Output Berdasarkan Ukuran?

  2. Cara Memperbaiki Kesalahan Editor Vi / Vim — E319:Maaf, perintah tidak tersedia di versi ini

  3. Cara mendapatkan ukuran direktori di Linux

  1. Beginilah Cara Server Linux Beroperasi

  2. terakhir:perintah tidak ditemukan

  3. Bagaimana cara menghapus X byte dari akhir file besar tanpa membaca seluruh file?

  1. Cara menggunakan sed untuk menghapus n baris terakhir dari sebuah file

  2. Cara menghapus peringatan:link.res berisi bagian keluaran; apakah kamu lupa -T?

  3. Bagaimana cara membuat file yang dinamai seperti argumen baris perintah?