GNU/Linux >> Linux の 問題 >  >> Linux

この警告を削除する方法:'va_start' の 2 番目のパラメーターは最後の名前の引数ではありませんか?

size を使用する必要があります fmt の代わりに :

va_start(args, size);

size です 、fmt ではありません 、これは明示的な名前を持つ最後のパラメーターです (名前のない vararg パラメーターとは対照的に)。最後に名前を付けたパラメーターを va_start に渡す必要があります vararg パラメータが開始するメモリ内のアドレスを把握するためです。


second parameter of ‘va_start’ not last named argument

意味と削除方法は?

関数の名前はパラメーター parent です 、 fmt そして size . C 仕様では、最後に名前を付けたパラメーターを常に va_start に渡す必要があると書かれています 、古いコンパイラとの互換性のため。したがって、size を渡す必要があります 、 fmt ではありません .

(しかし、最新のコンパイラでは、とにかく動作する可能性があります)


ここには混乱があると思います。ほとんどの人は、フォーマットと可変引数を持つ prinf のような関数のみを扱います。彼らは、フォーマットを記述するパラメータ名を渡す必要があると考えています。ただし、va_start は printf のような形式とは何の関係もありません。これは、名前のないパラメーターが開始するスタック上のオフセットを計算する単なる関数です。


Linux
  1. コメントされたコマンドの最後の引数にアクセスする方法は?

  2. 一致の2番目と2番目の最後の発生の間のすべてを削除しますか?

  3. 最後:コマンドが見つかりません

  1. 警告を削除する方法:link.res には出力セクションが含まれています。 -Tを忘れましたか?

  2. コマンドライン引数のような名前のファイルを作成するには?

  3. /etc/motd は名前付きパイプの場合に表示されませんか?

  1. Du出力をサイズで並べ替える方法は?

  2. Vi / Vim Editor エラーの修正方法 — E319:このバージョンではコマンドを使用できません

  3. 警告を無効にする方法:apt には安定した CLI インターフェイスがありません...