最近我经历了一些类似的代码:(代码是专有的,因此添加了类似代码)
#include<stdio.h>
void test_it(var)
{
printf("%d\n",var);
}
int main()
{
test_it(67);
return 0;
}
test_it
的参数没有提到数据类型。
我将其编译为 gcc test_it.c
...:令人惊讶的是没有警告/错误
我再次编译使用: gcc -Wall test_it.c
...:没有警告/错误再次
(现在变得更具侵略性......)
我使用以下方法重新编译: gcc -Wall -Wextra test_it.c
...:
warning: type of ‘var’ defaults to ‘int’
我终于得到了警告。
我尝试使用多个参数:
void test_it(var1, var2)
{
printf("%d\n%d\n",var1, var2);
}
int main()
{
test_it(67,76);
return 0;
}
同样的行为!!
我也尝试过这个:
void test_it(var)
{
printf("%d\n",var);
}
main() // Notice that no `int` there
{
test_it(67);
return 0;
}
此代码仅使用-Wall
选项发出警告。
所以我的问题是为什么int
数据类型对于函数定义中的函数参数不是必需的?
修改
重写问题:
为什么gcc
在省略函数参数的数据类型的情况下不会向-Wall
发出警告,但是在省略函数返回类型时会发出警告?为什么在第一种情况下忽略它?