§6.7.6.3函数声明符
2)参数声明中唯一的存储类说明符是register。
§6.7.6.3函数声明符
13)除非声明的参数是函数定义的参数类型列表的成员之一,否则将忽略参数声明的声明说明符中的存储类说明符(如果存在)。
我已经宣布并定义了这样......
int function(static int param)
{
return param;
}
Visual Studio正在发出警告。我理解的是,如果我们在函数声明中使用register
作为参数类型,它应该在没有警告的情况下编译。除了register
之外,它将忽略存储类并向用户发出警告消息。
我的理解是否正确?
由于
答案 0 :(得分:7)
我相信6.7.6.3表示在函数声明中会忽略存储类说明符;除非参数是函数定义的参数类型列表的一部分,否则它会被忽略。由于您正在显示函数 definition ,因此编译器在此处忽略此无效存储类说明符是不合适的。
答案 1 :(得分:1)
首先,Visual Studio
使用的编译器不符合c99/c11
标准。
函数definition
不应允许使用register
以外的存储类说明符。它应该将其标记为存储类的错误使用。如上所述,VS编译器不符合标准,它正在发出警告信息。
答案 2 :(得分:1)
AS表示Visual Studio不符合c99 / c11标准 这就是为什么这是警告。如果你用gcc编译..
你会在功能声明和功能定义
的地方得到error: storage class specified for parameter âparamâ
你可以只使用寄存器而不是其他的像静态,外部