在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?
答案 0 :(得分:3)
参见C11 6.7.6.3/15,讨论函数原型的兼容性:
在确定类型兼容性和复合类型时,使用函数或数组类型声明的每个参数都被视为具有调整类型,并且使用限定类型声明的每个参数都被视为具有其声明类型的非限定版本。 / p>
这指定您的定义与原型兼容。 “合格”是指存在顶级const
或volatile
。
答案 1 :(得分:0)
我认为这种类型的错误发生在不同类型的编译器上。 所以C18编译器检查函数声明&定义,但其他人没有。和C / CPP平台相关的编程语言。