#include <stdio.h>
void foo(auto int i); // line 3
int main()
{
foo(10);
}
void foo(auto int i) // line 13
{
printf("%d\n", i );
}
此代码有什么问题? 这个程序没有编译。
我看到的错误如下:
main.c:3:27: error: storage class specified for parameter 'i'
void foo(auto int i);
main.c:13:27: error: storage class specified for parameter 'i'
void foo(auto int i)
答案 0 :(得分:3)
auto
是存储类说明符。这用于局部变量(自动局部变量)您不能将其放在函数参数的声明中。
在编译时,您应该收到错误:
[Error] storage class specified for parameter 'i'
在C中,不允许在参数声明中放置存储类说明符(register
除外)
答案 1 :(得分:2)
在参数声明中唯一有效的存储类说明符是 register ,我们可以从draft C99 standard部分6.7.5.3
<看到这一点em>函数声明符(包括原型)段落 2 ,其中说:
参数声明中唯一的存储类说明符是register。
这是 C11 中的6.7.6.3
部分。
6.7.1
存储类说明符的存储类说明符如下:
typedef
extern
static
auto
register