使用自动作为参数

时间:2014-02-03 16:55:55

标签: c automatic-storage

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

2 个答案:

答案 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