#include "stdio.h"
int max();//老式声明
int main(void) {
double a = 1.0 , b = 1.0;
printf("%d",max(a, b));
return 0;
}
max(int a, int b) {
return a > b ? a : b;
}
产生的原因是老式声明没有规定传入参数,而函数传入为double型8位,函数定义为int型4位, 不同系统内部机制不同,出现问题的具体情况也不同。其中有一种为函数将参数传入栈中,整成情况下传入两个int型占据8位,但是若传入两个double型则占据了16位,所以函数执行时读出的数据位第一个double型的两半。
产生此问题只需将老式声明更正为int max(int a, int b);
对于无参数的函数原型标准写法为int max(void);