当前位置: 代码迷 >> C语言 >> 头文件问题
  详细解决方案

头文件问题

热度:359   发布时间:2006-03-27 13:28:00.0
头文件问题

下面一个是 MATH.H头文件,小弟不明白,头文件中只是定义了一些函数头 并没有实现部分.说是对系统函数的引用又看不见引用的地址,情说说头文件原理好吗?




/*
* math.h
*
* Mathematical functions.
*
* This file is part of the Mingw32 package.
*
* Contributors:
* Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* $Revision: 1.3 $
* $Author: khan $
* $Date: 1998/09/03 16:31:17 $
*
*/

#ifndef _MATH_H_
#define _MATH_H_

/* All the headers include this file. */
#include <_mingw.h>

/*
* Types for the _exception structure.
*/

#define _DOMAIN 1 /* domain error in argument */
#define _SING 2 /* singularity */
#define _OVERFLOW 3 /* range overflow */
#define _UNDERFLOW 4 /* range underflow */
#define _TLOSS 5 /* total loss of precision */
#define _PLOSS 6 /* partial loss of precision */

/*
* Exception types with non-ANSI names for compatibility.
*/

#ifndef __STRICT_ANSI__
#ifndef _NO_OLDNAMES

#define DOMAIN _DOMAIN
#define SING _SING
#define OVERFLOW _OVERFLOW
#define UNDERFLOW _UNDERFLOW
#define TLOSS _TLOSS
#define PLOSS _PLOSS

#endif /* Not _NO_OLDNAMES */
#endif /* Not __STRICT_ANSI__ */


#ifndef RC_INVOKED

#ifdef __cplusplus
extern "C" {
#endif

/*
* HUGE_VAL is returned by strtod when the value would overflow the
* representation of 'double'. There are other uses as well.
*
* __imp__HUGE is a pointer to the actual variable _HUGE in
* MSVCRT.DLL. If we used _HUGE directly we would get a pointer
* to a thunk function.
*
* NOTE: The CRTDLL version uses _HUGE_dll instead.
*/

#ifndef __DECLSPEC_SUPPORTED

#ifdef __MSVCRT__
extern double* __imp__HUGE;
#define HUGE_VAL (*__imp__HUGE)
#else
/* CRTDLL */
extern double* __imp__HUGE_dll;
#define HUGE_VAL (*__imp__HUGE_dll)
#endif

#else /* __DECLSPEC_SUPPORTED */

#ifdef __MSVCRT__
__MINGW_IMPORT double _HUGE;
#define HUGE_VAL _HUGE
#else
/* CRTDLL */
__MINGW_IMPORT double _HUGE_dll;
#define HUGE_VAL _HUGE_dll
#endif

#endif /* __DECLSPEC_SUPPORTED */

struct _exception
{
int type;
char *name;
double arg1;
double arg2;
double retval;
};


double sin (double x);
double cos (double x);
double tan (double x);
double sinh (double x);
double cosh (double x);
double tanh (double x);
double asin (double x);
double acos (double x);
double atan (double x);
double atan2 (double y, double x);
double exp (double x);
double log (double x);
double log10 (double x);
double pow (double x, double y);
double sqrt (double x);
double ceil (double x);
double floor (double x);
double fabs (double x);
double ldexp (double x, int n);
double frexp (double x, int* exp);
double modf (double x, double* ip);
double fmod (double x, double y);


#ifndef __STRICT_ANSI__

/* Complex number (for cabs) */
struct _complex
{
double x; /* Real part */
double y; /* Imaginary part */
};

double _cabs (struct _complex x);
double _hypot (double x, double y);
double _j0 (double x);
double _j1 (double x);
double _jn (int n, double x);
double _y0 (double x);
double _y1 (double x);
double _yn (int n, double x);
int _matherr (struct _exception *);

#ifndef _NO_OLDNAMES

/*
* Non-underscored versions of non-ANSI functions. These reside in
* liboldnames.a. Provided for extra portability.
*/
double cabs (struct _complex x);
double hypot (double x, double y);
double j0 (double x);
double j1 (double x);
double jn (int n, double x);
double y0 (double x);
double y1 (double x);
double yn (int n, double x);

#endif /* Not _NO_OLDNAMES */

#endif /* Not __STRICT_ANSI__ */

#ifdef __cplusplus
}
#endif

#endif /* Not RC_INVOKED */

#endif /* Not _MATH_H_ */

搜索更多相关的解决方案: 文件  

----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
实现部分在Math?.lib
----------------解决方案--------------------------------------------------------
头文件里并没有函数原形它只是声明,函数原形都在库函数里定义的

其实头文件和声明自己定义的函数的原理是一样的。只不过为了方便程序员不用一个

一个的把库函数里的函数声明一个一个的写出来。

用预处理include包含头文件是为了让编译器最后链接的时候可以按符号(就是函数名)

去库函数那里调用函数。
----------------解决方案--------------------------------------------------------
楼上大哥,明白了 ..谢谢!~~~
----------------解决方案--------------------------------------------------------
  相关解决方案