/*--------------------------------------------------------------------------
MATH.H
Prototypes for mathematic functions.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __MATH_H__
#define __MATH_H__
#pragma SAVE
#pragma REGPARMS
extern char cabs (char val);
extern int abs (int val);
extern long labs (long val);
extern float fabs (float val);
extern float sqrt (float val);
extern float exp (float val);
extern float log (float val);
extern float log10 (float val);
extern float sin (float val);
extern float cos (float val);
extern float tan (float val);
extern float asin (float val);
extern float acos (float val);
extern float atan (float val);
extern float sinh (float val);
extern float cosh (float val);
extern float tanh (float val);
extern float atan2 (float y, float x);
extern float ceil (float val);
extern float floor (float val);
extern float modf (float val, float *n);
extern float fmod (float x, float y);
extern float pow (float x, float y);
#pragma RESTORE
#endif
头文件MATH.H包含问题,请问我把MATH.H头文件包含后,但是没有包含MATH.H中函数的实现文件,例如MATH.C文件,是不是就可以调用MATH.H头文件中定义的函数了?这是什么道理呢?
因为你的开发环境lib路径中包含了该.h对应的lib库
如果没有包含需要人为去指定
extern就说明,在这里这些函数并不是第一次被声明,在别的地方肯定会有具体定义。
因为你的开发环境lib路径中包含了该.h对应的lib库
如果没有包含需要人为去指定,
我的意思是我在编写源程序的过程中
不需要将MATH.H对应的实现文件,比如是MATH.C 将它包含进来吗?
extern就说明,在这里这些函数并不是第一次被声明,在别的地方肯定会有具体定义。
我的意思是:在别的地方肯定会有具体定义,但是就是这个别的地方,我在编写源程序的过程中并
未将它包含进来。
这个.LIB文件在哪里能找到呢?一定要将.LIB文件添加到工程所在的文件夹吗?请教高手。
...\Keil\C51\INC\下的*.H文件中声明的函数,绝大多数都是C语言库函数和编译器库函数,对应的实现代码在...\Keil\C51\LIB\下的*.lib文件中(通常我们看不到它们的源码),在连接的时候,连接器自然知道到这里来找它们的实现,所以不需要将.lib文件添加到工程中去,只需在你的需要调用库函数的.C文件头部包含对应的.H声明要调用这些库函数就可以了。
例外的是C语言中的动态内存分配函数(malloc/calloc/realloc/free),它们的实现代码是以.C的形式提供的(在...\Keil\C51\LIB\文件夹下),需要程序员自己手工把它们复制到工程所在文件夹中并添加进工程。
#include
真正的函数实现细节可能封装在 .lib或者 .dll(windows程序)
有时候可能 *.lib并不会被链接到。还要添加:
#pragma comment (lib, "*.lib")