C语言中的函数声明器
§6.7.6.3功能声明器 2) 参数声明中应出现的唯一存储类说明符是寄存器 §6.7.6.3功能声明器 13) 参数声明的声明说明符中的存储类说明符(如果存在)将被忽略,除非声明的参数是函数定义的参数类型列表的成员之一 我已经这样声明和定义了C语言中的函数声明器,c,C,§6.7.6.3功能声明器 2) 参数声明中应出现的唯一存储类说明符是寄存器 §6.7.6.3功能声明器 13) 参数声明的声明说明符中的存储类说明符(如果存在)将被忽略,除非声明的参数是函数定义的参数类型列表的成员之一 我已经这样声明和定义了 int function(static int param) { return param; } Visual Studio正在发出警告。我的理解是,如果我们在函数声明中使用register作为参数类型,它应该在没有警告的情况下编译。除了注册,
int function(static int param)
{
return param;
}
Visual Studio正在发出警告。我的理解是,如果我们在函数声明中使用register
作为参数类型,它应该在没有警告的情况下编译。除了注册,它将忽略存储类并向用户抛出警告消息。
我的理解正确吗
谢谢我相信6.7.6.3是说在函数声明中忽略了存储类说明符;它表示,除非参数是函数定义的参数类型列表的一部分,否则它将被忽略。由于您正在显示函数定义,因此编译器在此处忽略此无效的存储类说明符是不合适的。首先,使用Visual Studio获得的编译器不符合
c99/c11
标准
函数
定义
不允许使用除寄存器
以外的存储类说明符。它应该将其标记为存储类的错误使用。如前所述,VS编译器不符合标准,它会抛出一条警告消息。如前所述,Visual Studio不符合c99/c11标准。这就是为什么这是一个警告。如果您使用gcc编译 您将在函数声明和函数定义处获得为参数-param指定的
error:storage类
您只能使用寄存器,不能使用其他寄存器,如static,extern你能包括Visual Studio给你的警告吗?register
在现代编译器中有什么区别吗?@druciferre:warning C4042:“param”:有坏的存储类标准是说在函数声明中忽略存储类说明符。。所以我尝试使用声明“void mp(auto int);”。但是我犯了一个错误。错误:-错误:为未命名参数指定了存储类。您能告诉我为什么我在函数声明中出现错误(因为存储类说明符在函数声明中被忽略,所以它不应该引发错误;)?