答えて
これはvariadic macroです。
リンク先のページからそのまま引用:
マクロが機能できるように多くの可変数の引数を受け入れるように宣言することができます。マクロを定義する構文は、関数の構文に似ています。ここに例があります:
#define eprintf(...) fprintf (stderr, __VA_ARGS__)
この種類のマクロはバリデーションと呼ばれます。マクロが呼び出されると、最後に指定された引数の後の引数リスト内のすべてのトークン(このマクロには何もありません)がコンマを含めて可変引数になります。トークンのこのシーケンスは、マクロ本体内の識別子VA_ARGSを置き換えます。ページにさらにダウン引用、
eprintf ("%s:%d: ", input_file, lineno) ==> fprintf (stderr, "%s:%d: ", input_file, lineno)
そして、その特定のフォームのために:このように、我々はこの拡張を持っている
マクロが複雑であれば、あなたはもっと説明的な名前をすることができ可変引数は
__VA_ARGS__
より大きい。 CPPはこれを拡張として許可しています。 `... 'の直前に引数名を書くことができます。その名前は可変引数に使用されます。上記eprintfマクロは、可変長マクロある#define eprintf(args...) fprintf (stderr, args)
可変数のパラメータ。 variadic macros
だろう。しかし、なぜ "..." の前に、 "" があるのでしょうか? – perfwill
@perfwill、そのような構文は、便宜上 - 名前を付けることです。 –
を書くことができます。
可変長マクロは、可変数の引数を受け入れるマクロです。この機能はC99で導入されました。パラメータa...
と
形態
#define IDEBUG(a...) printf(a)
はa
が__VA_ARGS__
識別子に名前を与え、GNU拡張です。
標準C99フォームが
#define IDEDBUG(...) printf(__VA_ARGS__)
- 1. objcではこの構文の意味は何ですか?
- 2. Swiftではこの構文の意味は何ですか?
- 3. PHP - この構文の意味は何ですか?
- 4. このObjective-C構文の意味は何ですか?
- 5. このTypeScriptインターフェイスの構文は何を意味しますか?
- 6. この関数の構文は何を意味しますか?
- 7. 、この特定の構文は何を意味しますか?
- 8. このフォントタグの構文は何を意味しますか?
- 9. このScalaの構文は何を意味しますか(_ *)?
- 10. この構文は何を意味しますか?
- 11. この構文とは何か明確な意味
- 12. #defineで0x1を使用する意味は何ですか?
- 13. このJS構文は何を意味し、何が '長さ'ですか?
- 14. "!"、 "?"、 "_"、 "。"の意味は何ですか?エリクシルの構文
- 15. C++で構文:: function_nameの意味は何ですか?
- 16. {}は、Binding構文のStringFormatセクションで何を意味しますか?
- 17. PHPのループ内で、この構文 '$ {$ key} = $ val'は何を意味しますか?
- 18. Cでのこのポインタ構文は何を意味しますか?
- 19. この構造はpowershellで何を意味しますか?$ {c:a.txt}
- 20. この構文はC++で何を意味していますか?
- 21. この文脈で__の意味は何ですか?
- 22. Makefileの構文@:は何を意味しますか?
- 23. "::"の構文は何を意味しますか?
- 24. C++の(*)構文は何を意味していますか?
- 25. コロン( ':')はSQL構文で何を意味しますか?
- 26. このocamlの構文は何を意味していますか?
- 27. jQueryプラグインのアーキテクチャ構文 - この行は何を意味しますか?
- 28. "define([...]、function(...){...});"という形式の.jsファイルの意味は何ですか?
- 29. このif文はjavaScriptで何を意味しますか?
- 30. このSSI条件文で "$"は何を意味しますか?
偉大な答え、+1とダニ:D – perfwill