分析一个include文件夹里的文件(string.h)越详细越好,

来源:百度知道 编辑:UC知道 时间:2024/06/16 16:48:18
/* string.h

Definitions for memory and string functions.

Copyright (c) Borland International 1987,1988
All Rights Reserved.
*/
#if __STDC__
#define _Cdecl
#else
#define _Cdecl cdecl
#endif

#ifndef _SIZE_T
#define _SIZE_T
typedef unsigned size_t;
#endif

void *_Cdecl memccpy (void *dest, const void *src, int c, size_t n);
void *_Cdecl memchr (const void *s, int c, size_t n);
int _Cdecl memcmp (const void *s1, const void *s2, size_t n);
void *_Cdecl memcpy (void *dest, const void *src, size_t n);
int _Cdecl memicmp (const void *s1, const void *s2, size_t n);
void *_Cdecl memmove (void *dest, const void *src, size_t n);
void *_Cdecl memset (void *s, int c, size_t n);
void _Cdecl movedata(unsigned srcseg, unsigned srcoff, unsigned dstseg,
unsigned dstoff, size_t n);
char *_Cdecl stpcpy (char *dest, const char *src);
char *_Cdecl strcat (ch

#if __STDC__
#define _Cdecl
#else
#define _Cdecl cdecl
#endif
这是一开始的编译选项,__STDC__ 表示你在编译选项里是否规定是标准C,如果规定了,那么后面_Cdecl就全部删掉,这就是define _Cdecl的作用
你可以看到如果_Cdecl表示一个空格或者什么都没有的话,后面所有的函数的申明语法都是标准C的,而如果没有规定是标准C那么,#define _Cdecl cdecl ,这样只有borland的编译器明白cdecl是什么意思,它是为了方便编译器理解申明的那些函数都是c函数的风格。这是我的理解。用borland c比较少

#define _Cdecl 定义为空,就是让改宏不起作用了,
很多时候这种用法用来做否些开关,比如assert 函数,我想他在 release模式不起作用,就可以在不是debug的时候吧改宏定义为空。

_Cdecl 是 函数的调用方式来的,默认的c c++ 就是使用这种方式的,这个和生成的汇编代码的参数有关,这种方式时,参数从右向左压入栈里面。

另外还有其他调用凡是,比如stdcall(参数从左向右入栈),fastcall ? 参数尽量通过寄存器来传递等等。
一般c代码都是用_Cdecl 这种的了,但可能有的时候规定你必须用其他的,比如Windows api 用到stdcall, 写directshow程序要求filter也必须采用stdcall。

Borland这样定义可能也是为了兼容不同的需要吧。

#if __STDC__
#define _Cdecl
#else
#define _Cdecl cdecl
#endif
如果名称空间__STDC__存在,则定义名称空间_Cdecl;否则,把_Cdecl替换成cdecl
剩下的一大堆都是函数的声明