C语言可以接收任意变量的函数的危险点

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$ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值