【发布时间】:2014-12-21 14:17:49
【问题描述】:
为什么会在 Visual Studio 中编译:
void foo(int a) {}
int main() {
foo(1,2);
}
有一个警告
source_file.c(4) : warning C4020: 'foo' : too many actual parameters
但为什么它不像 gcc/clang 那样是错误的呢?
我知道 K&R 风格的函数定义,但这仅适用于 foo(),它需要可变数量的参数。
如果标准允许这样做,我们将不胜感激。
【问题讨论】:
-
如果启用
/WX,则可以将其视为错误,这是首选。 -
我实际上并没有使用 VS。我从一个能够用 VS 编译它的学生那里得到了代码,但是我从 gcc 和 clang 那里得到了错误。抛出错误似乎是我做的唯一合理的事情,所以我试图了解 VS 在那里做了什么。
2去哪儿了? -
仅供参考:VS2013 会将其视为编译器错误:
error C2660: 'foo' : function does not take 2 arguments. -
标准没有定义“编译器错误”。它只需要“诊断”。诊断可能是警告或错误;该标准不区分它们。该标准也不要求编译器拒绝生成诊断的程序。
-
@RaymondChen 谢谢 - 我完全没有意识到这一点。
标签: c visual-studio