1. ホーム
  2. c

[解決済み] C言語で関数呼び出しの中の中括弧は何を意味するのですか?

2022-03-09 21:49:59

質問

K&R C bookの練習問題1-24で、基本的な構文エラー(アンバランスな括弧や括弧など)を検出するプログラムを作らなければならないので、解いてみようと思いました。私のシステム上に散在しているC言語のソースファイルでデバッグするためにいくつかのテストを実行しました。 私のプログラムは、ファイル中のこの行に出会ったとき、エラーを検出した。

av_opt_set_q  (abuffer_ctx, "time_base", (AVRational ){ 1, INPUT_SAMPLERATE }, AV_OPT_SEARCH_CHILDREN);

私は、通常の中括弧が出現するたびに(コメントや二重引用符の外側)、括弧と括弧のバランスがとれていなければならないと仮定していました。このエラーが示すように、これは真実ではありません。残念ながら、私はそれが何を意味するのか見つけることができません。ご協力ありがとうございました。

解決方法を教えてください。

これは

 (AVRational ){ 1, INPUT_SAMPLERATE }

複合リテラル . 詳しくはこちら こちら .

から C11 の章では、§6.5.2.5を参照してください。

括弧で囲まれた型名の後に、中括弧で囲まれた のリストが複合リテラルです。これは、初期化子のリストで指定された値を持つ無名のオブジェクトを提供します。

とはいえ、ここで中括弧のバランスが悪いとは思えません。これは有効な構文であり、ツールはこれを考慮しながら決定を下すべきです。