Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的函数声明器_C - Fatal编程技术网

C语言中的函数声明器

C语言中的函数声明器,c,C,§6.7.6.3功能声明器 2) 参数声明中应出现的唯一存储类说明符是寄存器 §6.7.6.3功能声明器 13) 参数声明的声明说明符中的存储类说明符(如果存在)将被忽略,除非声明的参数是函数定义的参数类型列表的成员之一 我已经这样声明和定义了 int function(static int param) { return param; } Visual Studio正在发出警告。我的理解是,如果我们在函数声明中使用register作为参数类型,它应该在没有警告的情况下编译。除了注册,

§6.7.6.3功能声明器

2) 参数声明中应出现的唯一存储类说明符是寄存器

§6.7.6.3功能声明器

13) 参数声明的声明说明符中的存储类说明符(如果存在)将被忽略,除非声明的参数是函数定义的参数类型列表的成员之一

我已经这样声明和定义了

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);”。但是我犯了一个错误。错误:-错误:为未命名参数指定了存储类。您能告诉我为什么我在函数声明中出现错误(因为存储类说明符在函数声明中被忽略,所以它不应该引发错误;)?