我试图解决K&R C书籍中的练习1-24,您必须在其中创建一个程序,该程序可以检测基本语法错误(括号,方括号等不平衡)。我进行了一些测试,以对分散在系统中的C源文件进行调试。 我的程序在文件中遇到此行时检测到错误:
av_opt_set_q (abuffer_ctx, "time_base", (AVRational ){ 1, INPUT_SAMPLERATE }, AV_OPT_SEARCH_CHILDREN);
我假设每次遇到常规花括号(外部注释,双引号)时,括号和括号必须保持平衡。正如该错误所示,这是不正确的。不幸的是,我找不到它的意思。谢谢你的帮助。
答案 0 :(得分:6)
此
(AVRational ){ 1, INPUT_SAMPLERATE }
是compound literal。进一步了解here。
摘自C11
,第6.5.2.5章
一个后缀表达式,由带括号的类型名称和大括号括起来的类型组成 初始化程序列表是复合文字。它提供了一个未命名的对象,其值由初始值设定项列表给出。
也就是说,我看不到括号在这里如何不平衡。这是一种有效的语法,您的工具在做出决定时应考虑这一点。