遇到这样一个问题
a.h
void func();
a.c
void func(int abc)
{
if(0 == abc)
{
abc++;
}
return;
}
b.c
#include "a.h"
int main(void)
{
func();
return 0;
}
上面这一系列代码,在某些编译器编译后,并不会报错,但当其运行时,会发生错误
具体系统都做了些什么呢
由于操作系统的内部机制不同,错误的结果也可能不同
可能的执行过程如下
1.调用函数首先把参数放进堆栈临时储存
2.被调用的函数从堆栈中读取这些参数
3.被调用的函数是根据其形参的类型进行数据读取的。因此,函数调用func()时要将一个int型放到到堆栈中
4.当函数func()执行时,虽然没有正确的参数在堆栈中,函数还是会到堆栈中取一个int,所以出错
解决方法
在声明函数的同时为其指定参数的类型,如果没有输入参数要写void
即如果函数的原型有参数,但是声明没有参数却写了一个void,此时编译器会报错