- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我知道 f(void) { return 0;
的返回类型为 int
,即使未指定,但以下情况如何:
(*f())[]{}
(*g())(){}
const*h(){}
使用 -ansi -Werror -pedantic
在 gcc 上编译没有错误,并且只提示 clang 中缺少 return 语句:https://godbolt.org/z/jAYL4v
f
似乎有 int(*)[]
的返回类型,g
似乎有 的返回类型int(*)()
,而 h
似乎有 const int*
的返回类型。
在 ANSI C 标准中,我似乎找不到这方面的规则。我检查了 [6.5.4.3 Function declarators (including prototypes)] 和 [6.7.1 Function definitions],但甚至找不到有关隐式 int 返回类型的任何内容(某些示例代码除外)。我只是找错地方了吗?这是有效代码吗?
最佳答案
函数定义 (C89 3.7.1) 的语法是:
function-definition: declaration-specifiersopt declarator declaration-listopt compound-statement
这与 C99 相同,只是 声明说明符 在 C89 中是可选的。
这些语法术语的含义是:
static
, float
, const
。int ______ ;
。它当然有一个正式的定义,但我提到了这种方法,因此您可以将术语与您对声明语法的现有理解联系起来。在您的问题中,以下是声明符:(*f())[]
(*g())()
*h()
。因此,在它们后面加上 {}
(即复合语句)是合法的。 h
也有一个声明说明符。
在 C89 中还有一条规则 (3.5.2),即在一组 declaration-specifiers 中不提供 type-specifier 等同于提供 int
。 C99 添加了一个约束“至少一个类型说明符应在每个声明的声明说明符中给出 [...]”。
关于c - ANSI C 函数声明中隐式 int 返回类型的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56194319/
我是一名优秀的程序员,十分优秀!