询问int foo(int (bar),int(baz))是否符合C17标准及对应条款
关于C17标准下
int foo(int (bar), int (baz));语法合规性的确认 合规性结论
该函数声明完全符合ISO/IEC 9899:2017(C17)标准,并非编译器特有扩展行为。
标准语法依据
要理解这个语法的合法性,需结合C17标准的以下规则:
- 参数列表与参数声明的基础结构
标准附录A.2.2(对应正文6.7.6节)定义的参数列表语法中,parameter-list由多个parameter-declaration组成,而parameter-declaration的完整语法为:parameter-declaration: decl-specifiers declarator(opt) decl-specifiers abstract-declarator(opt) - 括号包裹标识符的合法性
正文6.7.6.1节(声明符的结构)明确规定,direct-declarator可以是包裹在括号中的declarator,即:
因此direct-declarator: identifier ( declarator ) /* 其他形式省略 */(bar)属于合法的direct-declarator,结合类型说明符int后,int (bar)就是合法的parameter-declaration,语义上完全等价于int bar——括号仅用于调整语法优先级,不改变声明的实际含义。
编译器验证
你提供的示例代码可通过gcc --std=c17 -Wall和clang --std=c17 -Wall无错编译,这两个主流编译器均正确识别了该标准语法,进一步验证了合规性。
关于cppcheck的解析错误
静态分析工具cppcheck出现解析错误,属于工具自身对C标准语法的支持缺失,而非代码不符合标准。你可以向cppcheck项目提交Bug报告,要求修复该语法解析问题。
内容的提问来源于stack exchange,提问作者GandhiGandhi
相关产品推荐
相关产品推荐

