答えて
これは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. このObjective-C構文の意味は何ですか?
- 3. PHP - この構文の意味は何ですか?
- 4. このフォントタグの構文は何を意味しますか?
- 5. 、この特定の構文は何を意味しますか?
- 6. この構文は何を意味しますか?
- 7. #defineで0x1を使用する意味は何ですか?
- 8. "!"、 "?"、 "_"、 "。"の意味は何ですか?エリクシルの構文
- 9. {}は、Binding構文のStringFormatセクションで何を意味しますか?
- 10. PHPのループ内で、この構文 '$ {$ key} = $ val'は何を意味しますか?
- 11. Cでのこのポインタ構文は何を意味しますか?
- 12. この構造はpowershellで何を意味しますか?$ {c:a.txt}
- 13. この文脈で__の意味は何ですか?
- 14. Makefileの構文@:は何を意味しますか?
- 15. "::"の構文は何を意味しますか?
- 16. コロン( ':')はSQL構文で何を意味しますか?
- 17. jQueryプラグインのアーキテクチャ構文 - この行は何を意味しますか?
- 18. Javascript:この構文は何を意味しますか(0、functionName)(functionParemeter);
- 19. このSSI条件文で "$"は何を意味しますか?
- 20. このif文はjavaScriptで何を意味しますか?
- 21. "define([...]、function(...){...});"という形式の.jsファイルの意味は何ですか?
- 22. xpath構文意味
- 23. 構文解析の意味テキストからの意味
- 24. 構文指向翻訳とは何を意味しますか?
- 25. ルビ構文は何を意味しますか?
- 26. 構文定数(レジスタ)は何を意味しますか?
- 27. このCSS文の "@"は何を意味しますか?
- 28. 構文:のconst {} = variableNameに、誰もがこの構文ではJavaScript(おそらくES6)に何を意味する
- 29. このアセンブリ文は何を意味しますか?
- 30. このRegex文字列は何を意味しますか?
偉大な答え、+1とダニ:D – perfwill