函数调用中的花括号在C中意味着什么?

时间:2019-11-21 07:45:35

标签: c curly-braces compound-literals

我试图解决K&R C书籍中的练习1-24,您必须在其中创建一个程序,该程序可以检测基本语法错误(括号,方括号等不平衡)。我进行了一些测试,以对分散在系统中的C源文件进行调试。 我的程序在文件中遇到此行时检测到错误:

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

我假设每次遇到常规花括号(外部注释,双引号)时,括号和括号必须保持平衡。正如该错误所示,这是不正确的。不幸的是,我找不到它的意思。谢谢你的帮助。

1 个答案:

答案 0 :(得分:6)

 (AVRational ){ 1, INPUT_SAMPLERATE }

compound literal。进一步了解here

摘自C11,第6.5.2.5章

  

一个后缀表达式,由带括号的类型名称和大括号括起来的类型组成   初始化程序列表是复合文字。它提供了一个未命名的对象,其值由初始值设定项列表给出。

也就是说,我看不到括号在这里如何不平衡。这是一种有效的语法,您的工具在做出决定时应考虑这一点。