函数参数是否允许静态说明符?

时间:2014-07-15 00:22:01

标签: c++ c static

物业:
没有具体原因。只是新手检查static用法的完整性。

我只是在标准中搜索禁止静态参数的引用。 (以及可能的原因)

我正在尝试下面的代码,但编译器失败了:

void function(static int i) {
    static int num_call = 0;
    cout << "At " << num_call << "-th call, argument value is: " << i << endl;
}

这仅适用于理论语法讨论。

编辑:

ISO C11 6.7.6.3第2段:“在参数声明中应出现的唯一存储类说明符是寄存器。” - Keith Thompson 24分钟前

3 个答案:

答案 0 :(得分:3)

没有。它没有。可以与参数一起使用的唯一存储类是register

C11:6.7.6.3函数声明符:

  

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

答案 1 :(得分:3)

在ANSI C89标准的3.5.4.3节函数声明符中,可以找到:

  

唯一存在于参数中的存储类说明符   声明是注册。

这意味着在实践中函数参数在堆栈或寄存器中传递。 (即使没有“寄存器”存储类,它们也可以在寄存器中传递。)我想不出为什么人们可能想在静态存储中传递参数的原因 - 这对我来说似乎毫无意义。

答案 2 :(得分:0)

Why can a function not have a Static parameter?已回答了同样的问题。

希望这会有所帮助。 :)