错误:为参数指定的存储类

时间:2014-08-29 14:46:16

标签: c

#include<stdio.h>

int recursive(static int a,static int b){
    static int c = 100;
    if(c != 105){
        c++;
        a++;
        b++;
        recursive(a,b);
        printf("\n a : %d b : %d \n",a,b);
    }
    return 0;
}


int main(){
    int a = 10;
    int b = 1;
    recursive(a,b);
}

获取编译错误如下:

error: storage class specified for parameter ‘a’
error: storage class specified for parameter ‘b’

为什么我们不能将函数参数声明为static。上面的程序在参数为int时传递,编译得很好并给出了预期的输出。

2 个答案:

答案 0 :(得分:4)

唯一的存储类说明符是函数参数register

C11:6.7.6.3函数声明符(包括原型):

  

参数声明中唯一的存储类说明符是register

答案 1 :(得分:2)

  

为什么我们不能将函数参数声明为static。

函数参数与本地变量具有相同的存储类。

这就是为什么他们只能拥有自动(堆栈)存储类。

它们也可以具有register存储持续时间,但是,这只是编译器的非绑定优化提示。