物业:
没有具体原因。只是新手检查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分钟前
答案 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?已回答了同样的问题。
希望这会有所帮助。 :)