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


const keyword before a function in C

我想知道"c"中的函数之前的"const"关键字的作用。

例如:

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

提前谢谢


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

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

这很容易让你得出这样的结论:

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

基本相同:

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


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

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

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

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


它没有任何意义。当C允许隐式返回类型int(如果没有显式指定返回类型)时,似乎是一些旧代码有效。但在任何情况下,返回值都不是左值,不能更改。所以常量限定符是多余的。