C语言中的函数声明符

时间:2013-09-19 12:30:44

标签: c

§6.7.6.3函数声明符

  

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

§6.7.6.3函数声明符

  

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

我已经宣布并定义了这样......

int function(static int param)
{
    return param;
}

Visual Studio正在发出警告。我理解的是,如果我们在函数声明中使用register作为参数类型,它应该在没有警告的情况下编译。除了register之外,它将忽略存储类并向用户发出警告消息。 我的理解是否正确?

由于

3 个答案:

答案 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â

你可以只使用寄存器而不是其他的像静态,外部