【发布时间】:2012-09-20 12:38:58
【问题描述】:
我不明白为什么这段代码可以编译?
#include <stdio.h>
void foo() {
printf("Hello\n");
}
int main() {
const char *str = "bar";
foo(str);
return 0;
}
gcc 甚至没有警告我向 foo() 传递了太多参数。这是预期的行为吗?
【问题讨论】:
-
欢迎使用 C 语言,这是遗留标准的一部分。仅供参考,它在 C++ 中不受支持。
-
如果您将函数声明为
void foo(void),通常可以激发编译器生成警告 -
@HansPassant:如果您将其声明为
void foo(void),编译器通常应该给出错误,而不仅仅是警告(尽管官方措辞只需要“诊断”)。 -
编译时添加-Wall
-
@reddragon 见my answer。
标签: c gcc compiler-errors