这是我的代码
main.c
#include <stdio.h>
#include <stdbool.h>
#include "func.h"
int main () {
int counts = 10;
printf("Expected: %lF and rcount %lF,%lF\n",
counts * 30* 0.156, rcount(0,30), rcount(30,0));
return 0;
}
这是我简化的func.h
#ifndef FUNC_INCLUDED
#define FUNC_INCLUDED
float rcount(int m, int n);
#endif
最后来了我的func.c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include "func.h"
double rcount(int m, int n) {
double series1 = ((double)m/2)*(10+(double)m*10)/20;
double series2 = ((double)n/2)*(10+(double)n*10)/20;
return (series2 > series1) ? series2-series1 : series1-series2;
}
现在,如果我执行,我会得到rcount()
的随机值,而如果我从main中删除#include<stdbool.h>
,我会得到正确的值。
有什么想法吗?
答案 0 :(得分:1)
正如@Carl Norum所说,“必须有一些你没有告诉我们的东西”是非常有说服力的。
rcount()调用是printf()语句返回其double类型,但是printf()因为原型而期望浮动,或者如果没有看到原型则期望int。在任何一种情况下,printf()都会显示错误的数据。
尝试3件事:1)使用FUNC_INCLUDED以外的其他定义,稍微可能stdbool.h正在使用该宏。 2)改变你的原型和实现返回相同的类型,最好是双倍。 3)直接在main()之前制作rcount()原型的冗余副本。
extern double rcount(int m, int n);
使用/缺少stdbool.h是一个红鲱鱼。有/没有它,你的编译正在使用一些不同的文件,选项等(除非它的FUNC_INCLUDED)