C语言可以接收任意变量的函数的危险点
思考:看看两个函数的区别
之前确实没有注意一个C语言上的问题。int fun()和int fun(void) 这两个函数之间到底有什么不一样。没有注意之前,本以为这两个函数都是不需要传入参数,使用那个都无所谓,可是真的一样吗?
用编译器说话
在Ubuntu下,使用GCC编译器写一个测试函数
#include<stdio.h>
int func()
{
printf("程序运行正常 \n");
return 0;
}
int main(void)
{
int data=0;
func(data);
return 0;
}
编译运行
ubuntu@ubuntu:~/Study/C$ gcc func.c
ubuntu@ubuntu:~/Study/C$ ./a.out
程序运行正常
ubuntu@ubuntu:~/Study/C$
程序完美的运行。
如果使用
#include<stdio.h>
int func1()
{
printf("func 1 程序运行正常 \n");
return 0;
}
int func2(void)
{
printf("func 2 程序运行正常 \n");
return 0;
}
int main(void)
{
int data=0;
func1(data);
func2(data);
return 0;
}
编译:
ubuntu@ubuntu:~/Study/C$ gcc func.c
func.c: In function ‘main’:
func.c:24:2: error: too many arguments to function ‘func2’
func2(data);
^
func.c:10:5: note: declared here
int func2(void)
^
ubuntu@ubuntu:~/Study/C$
报错信息很明显,所以在使用C语言写程序的时候,要注意程序的严谨性。
如果使用G++呢?
使用第一个代码,用G++ 编译,结果
ubuntu@ubuntu:~/Study/C$ g++ func.c
func.c: In function ‘int main()’:
func.c:17:12: error: too many arguments to function ‘int func1()’
func1(data);
^
func.c:3:5: note: declared here
int func1()
^
ubuntu@ubuntu:~/Study/C$