2

用 C 编写代码时,我经常const在函数定义中包含函数参数声明,但不包含它的声明:

int func(int arg);

...

int func(int const arg)
{
    return arg + 1;
}

这总是使用 GCC 和 Clang 为我编译而没有问题,但 Microchip 的 C18 编译器声称类型不匹配。

标准对此有何规定?我是否一直依赖非标准扩展?

编辑:我不是在问这样做的好处,也不是像在假定的重复问题(Use of 'const' for function parameters)中那样询问 C++。我问的是 C 标准:这是合法的 ANSI C、C99 还是 C11?

4

2 回答 2

3

参见 C11 6.7.6.3/15,讨论函数原型的兼容性:

在类型兼容性和复合类型的确定中,每个以函数或数组类型声明的参数都被视为具有调整后的类型,而每个以限定类型声明的参数都被视为具有其声明类型的非限定版本。

这指定您的定义与原型兼容。“合格”是指存在顶级constvolatile.

于 2016-10-22T06:48:13.410 回答
-1

我认为这种类型的错误发生在不同类型的编译器上。所以 C18 编译器检查函数声明和定义,但其他人没有。和 C/CPP 平台相关的编程语言。

于 2016-10-21T14:26:57.647 回答