【发布时间】:2019-10-05 06:03:55
【问题描述】:
我知道f(void) { return 0; } 的返回类型为int,尽管没有指定,但以下内容呢:
(*f())[]{}
(*g())(){}
const*h(){}
这在 gcc 上使用 -ansi -Werror -pedantic 编译没有错误,并且只抱怨在 clang 中缺少 return 语句:https://godbolt.org/z/jAYL4v
f 的返回类型似乎为int(*)[],g 的返回类型似乎为int(*)(),而h 的返回类型似乎为const int*。
在 ANSI C 标准中,我似乎找不到这方面的规则。我检查了 [6.5.4.3 函数声明符(包括原型)] 和 [6.7.1 函数定义],但在隐式 int 返回类型上什至找不到任何内容(某些示例代码除外)。我只是看错地方了吗?这是有效的代码吗?
【问题讨论】:
-
您真的在问 1989 年的 ANSI C 标准吗?您是使用 30 年前的代码还是使用 30 年前的编译器为系统编写新代码?还是您在选择要询问的标准版本时犯了错误?
-
@EricPostpischil 我正在编写代码高尔夫(让程序做某事的最少字节),我发现我可以将
int*h(){}写成*h(){}并且找不到原因(据我所知,C89 是唯一具有默认 int 返回类型的标准,这个问题可能有意义) -
正如 Eric 所说,讨论史前标准毫无意义。当它过时时,许多程序员甚至还没有出生
-
@P__J__:我说没有这样的事情,这不是真的。今天有旧代码在使用,有些人需要使用它。
-
哈哈@这些cmets。 “这与我无关,所以毫无意义”
标签: c language-lawyer c89