2

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

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

我做了一个假设,每次遇到常规大括号(外部注释、双引号)时,括号和括号必须保持平衡。正如此错误所示,这不是真的。不幸的是,我找不到它的含义。谢谢你的帮助。

4

1 回答 1

6

这个

 (AVRational ){ 1, INPUT_SAMPLERATE }

复合文字在这里查看更多信息。

C11第 §6.5.2.5 章

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

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

于 2019-11-21T07:47:05.093 回答