【发布时间】:2011-11-25 20:43:33
【问题描述】:
在这里,我在主参数声明中写下了我的名字,但这个程序仍然有效并且没有给出任何警告。
#include <stdio.h>
int main(Mr32)
{
printf("why this works?");
return 0;
}
每当我写任何东西代替 mr32 时,代码仍然有效。我真的不知道为什么会这样。根据 C 编程标准,这是错误的,对吧?
编辑:我试过 -Wall 但它没有给出任何警告。
我认为这里应该是错误的,因为我没有做标准的C函数定义声明
在 c 中每个函数定义都必须遵循这种格式
return-type function_name ( arg_type arg1, ..., arg_type argN );
这也应该适用于 main() 对 ..??
好的 -Wextra 显示 mr32 默认为 int 的警告。
那为什么 main() 中任何参数的默认类型都是 int 呢?
【问题讨论】:
-
提高编译器的警告级别并注意警告
-
除了缺少的
#include <stdio.h>,即使使用-Wall,gcc 也不会抱怨。只有-Wextra它抱怨Mr32默认为int。问题更多的是关于默认的主要参数:哪个规范定义了主要的类型默认为 int? -
@pmg: 是的
gcc -Wextra抱怨。但问题是:为什么是警告而不是错误?为什么默认为int?这是在哪里以及如何指定的? -
@Matteo 谢谢兄弟...你有我的问题..
-
@Matteo:它在 C89 的 3.5.4.3 中指定,它允许使用
identifier-list而不是parameter-type-list。我不确定标准是否在规范文本中明确声明参数被假定为int,或者这是否只是因为 C89 中的任何变量默认情况下都是 int(即auto a;定义了一个自动变量,它是一个 int),但在 3.7.1 中有一个示例确实提到int是此类函数参数的默认值。
标签: c gcc compiler-construction error-handling main