今天在一本书上所到多文件工程使用makefile编译源码的时候,练习了一个小例子,没想到练出问题了,首先给大
家列出我的目录结构和源码:
zhou@zhou:~/zhou/test$ ls add main.c Makefile |
main.c
/* main.c */
#include <stdio.h>
#include "add.h"
int main(void)
{
float x= 1.2,y = 9.8;
printf("x=%f,y=%f,x+y=%f\n",x,y,x+y);
float m = add_float(x,y);
printf("float x+y IS:%lf\n",m);
return 0;
} |
进到add目录下:
zhou@zhou:~/zhou/test/add$ ls add_float.c add.h zhou@zhou:~/zhou/test/add$
|
add_float.c
/* add_float.c */ #include float add_float(float a, float b) { printf("a=%f,b=%f,a+b=%f\n",a,b,a+b); return a+b; }
|
add.h
/* add.h */ #ifdef __ADD_H__ #define __ADD_H__ extern int add_int(int a, int b); extern float add_float(float a, float b);
#endif /*__ADD_H__*/
|
makefile
CFLAGS = -Iadd VPATH=add OBJS = add_float.o main.o TARGET = cacu
$(TARGET):$(OBJS) $(CC) -o $(TARGET) $(OBJS) $(CFLAGS) clean: -$(RM) $(TARGET) -$(RM) $(OBJS)
|
然后就make:
zhou@zhou:~/zhou/test$ make
cc -Iadd -c -o add_float.o add/add_float.c
cc -Iadd -c -o main.o main.c
cc -o cacu add_float.o main.o -Iadd
zhou@zhou:~/zhou/test$ ls
add add_float.o cacu main.c main.o Makefile
zhou@zhou:~/zhou/test$
zhou@zhou:~/zhou/test$ ./cacu
x=1.200000,y=9.800000,x+y=11.000000
a=2.000000,b=1.900000,a+b=3.900000
float x+y IS:35.000000
上面红色标记的地方明显不对,参数传到add_float()中就变了,不知道什么原因,后来将这个小工程中
所有的float换成double,结果就全对了。
所以建议大家以后使用到浮点数的时候最好直接使用double。。嘿嘿。
哪位大牛有什么见解的话邮件(zhouyongfei1988@gmail.com)告诉我一声,小弟在此谢谢了。
ps: 在这首先感谢王聪学长和小雪。这个链接(传送门)是我贴上了我们在 小组邮件列表里面的讨论过程,看了这个应该就明白其中的原因了吧。