C 使用stdbool.h时出现意外的编译器行为

C 使用stdbool.h时出现意外的编译器行为,c,C,这是我的密码 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; } 最后是我的函数c #

这是我的密码

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;
}
最后是我的函数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;
}
#包括
#包括
#包括
#包括“func.h”
双计数(整数m,整数n){
双系列1=((双)m/2)*(10+(双)m*10)/20;
双系列2=((双)n/2)*(10+(双)n*10)/20;
返回(序列2>序列1)?序列2-序列1:序列1-序列2;
}
现在,如果我执行,我会得到
rcount()
的随机值,而如果我从main中删除
#include
,我会得到正确的值

有什么想法吗?

正如@Carl Norum所说,“一定有什么事你没有告诉我们”非常有说服力

如果printf()语句返回其double类型,则rcount()调用是无效的,但是printf()由于原型而预期为浮点,如果原型未被看到,则预期为int。无论哪种情况,printf()都会显示错误的数据

尝试3种方法:1)使用除包含FUNC_之外的其他定义,stdbool.h可能正在使用该宏。2) 更改原型和实现以返回相同的类型,最好是双精度。3) 在main()之前直接创建rcount()原型的冗余副本


stdbool.h的使用/缺乏是一种误导。有/没有它,您的编译使用的是不同的文件、选项等(除非它包含函数)

我看不出这有什么区别。你是如何建造它的?您是否注意到您的
rcount
的原型和实现不匹配?事实上,我也可以执行rcount(“,”,“,”,”),但它不会给我一个语法错误:/我会重申,然后。你是如何建造它的?我复制并粘贴了这段精确的代码,无论是否使用stdbool.h,它都可以正常工作。尝试使用stdbool,我在mac上使用gcc:i686-apple-darwin11-llvm-gcc-4.2Same,它可以正常工作。一定有什么你没有告诉我们。另一种迹象表明某些信息没有正确传达:
func.c
应该无法编译,因为
func.h
中原型的
rcount()
类型与
func.c
中定义的
rcount()
类型不匹配。
#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;
}
extern double rcount(int m, int n);