我想知道“ C ”中的函数之前的“ const ”关键字是什么。
例如:
extern const int func1(int x[], const struct dummy_s* dummy)
提前致谢
答案 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。