1
#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)
4

2 回答 2

3

auto是存储类说明符。这是用于局部变量(自动局部变量)的,不能放在函数参数的声明中。

在编译你应该得到错误:

[Error] storage class specified for parameter 'i'  

在 C 中,不允许在参数声明中放置存储类说明符(除了register

于 2014-02-03T16:57:52.710 回答
2

在参数声明中唯一有效的存储类说明符register,我们可以从草案 C99 标准部分 6.7.5.3 函数声明符(包括原型)2段中看到这一点,其中说:

唯一应该出现在参数声明中的存储类说明符是寄存器。

这是6.7.6.3C11的部分。

存储类说明符部分中的6.7.1 存储类说明符如下:

typedef
extern
static
auto
register
于 2014-02-03T17:05:34.323 回答