【发布时间】:2010-08-22 14:09:29
【问题描述】:
我正在阅读一些代码示例,它们返回了一个 const int。当我尝试编译示例代码时,我收到了有关返回类型冲突的错误。所以我开始搜索,认为 const 是问题所在(当我删除它时,代码工作正常,不仅编译,而且按预期工作)。但是我从来没有找到与 const 返回类型相关的信息(我为结构/参数/等找到了信息,但没有找到返回类型)。所以我试着写一段代码来简单地展示 const 可以做什么。我想出了这个:
#include <stdio.h>
int main() {
printf("%i", method());
}
const int method() {
return 5;
}
当我编译这个时,我得到:
$ gcc first.c
first.c:7: error: conflicting types for ‘method’
first.c:4: note: previous implicit declaration of ‘method’ was here
但是,每当我删除 const 时,它就像预期的那样简单地打印出一个 5,a 继续生活。那么,谁能告诉我 const 在用作返回类型时应该是什么意思。谢谢。
【问题讨论】:
-
在这个例子中,问题是不同的:你在声明之前使用了
method(),所以隐式假设它返回一个int。依赖这种过时的行为是一个坏主意。更改您的示例以将method()声明为返回const int以使其更具代表性。换句话说,这里的const和非const类型之间存在标准冲突,const类型是函数返回的类型这一事实无关紧要。 -
gcc 是否还有 -ansi-pedantic 选项?对于新代码,这可能是强制性的。
-
Meta-pedantic:
-ansi和-pedantic是单独的选项 ;-) -
meta-meta-pedant:pedantic 正在检查标准的一致性,C 标准包括“过时”的行为。
-
好的,我已经很久没有关心了,但我很确定有一个选项可以强制使用原型。那不是-ansi吗?