在C中的函数之前的const关键字

时间:2014-10-17 13:36:24

标签: c

我想知道“ C ”中的函数之前的“ const ”关键字是什么。

例如:

extern const int func1(int x[], const struct dummy_s* dummy)

提前致谢

3 个答案:

答案 0 :(得分:4)

如果您打开警告,您将有两个:

warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
warning: 'const' type qualifier on return type has no effect [-Wignored-qualifiers]

这很容易让你得出结论:

extern const func1(int x[], const struct dummy_s* dummy)

基本上与:

相同
extern int func1(int x[], const struct dummy_s* dummy)

答案 1 :(得分:2)

没有任何意义。如果未明确指定返回类型,那么当C允许隐式返回类型为int时,似乎有些旧代码是有效的。但无论如何,返回值不是左值,不能更改。所以const限定符是多余的。

答案 2 :(得分:2)

在标准C中,您的代码将无法编译。不允许省略C函数的返回类型。

在一个旧的,过时的C版本C90中,你被允许省略返回类型,在这种情况下它将默认为int。在旧版本的C中,您的代码将等于:

extern const int func1(int x[], const struct dummy_s* dummy);

接下来的问题是,从函数返回const int是否有意义,而不仅仅是int?不,它没有......因为返回的变量总是放在堆栈上的硬拷贝。它不是左值,无论如何都在运行时执行,没有理由为什么这个值需要是const。