如何看到编译器里面的库函数实现
想看下哪些库函数memcpy, memmove, atoi具体怎么实现的,谢谢(我知道自己可以写个类似的)
[解决办法]
看LINUX内核代码
[解决办法]
\Microsoft Visual Studio\VC98\CRT\SRC 里头
MEMCPY.C
ATOX.C
MEMMOVE.C
[解决办法]
在你的vc安装目录下有代码,比如我的vs2005
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src
memcpy.c
memmove.c
atox.c
atof.c
如果拟订是intel cpu,vc运行的时候可能是使用了汇编版本 :
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\intel
memcpy.asm
memmove.asm
[解决办法]
库函数的实现是OS的部分,不属于编译器的事,编译器那里只有一个符合规范的接口而已...
[解决办法]
在VC安装目录下面找就行了..
库函数名.c直接打开就能看到..
[解决办法]
这个以前帖子有讨论过 我贴过来
#include <stdlib.h>void main(){ int i = atoi("123");}编译连接这段程序:f10单步跟踪->到main里的那句后,按f11进入到atoi的函数体里:int __cdecl atoi( const char *nptr ){ return (int)atol(nptr);}再按f10、f11进入atol的函数体:long __cdecl atol( const char *nptr ){ int c; /* current char */ long total; /* current total */ int sign; /* if '-', then negative, otherwise positive */ /* skip whitespace */ while ( isspace((int)(unsigned char)*nptr) ) ++nptr; c = (int)(unsigned char)*nptr++; sign = c; /* save sign indication */ if (c == '-' || c == '+') c = (int)(unsigned char)*nptr++; /* skip sign */ total = 0; while (isdigit(c)) { total = 10 * total + (c - '0'); /* accumulate digit */ c = (int)(unsigned char)*nptr++; /* get next char */ } if (sign == '-') return -total; else return total; /* return result, negated if necessary */}想找其他函数也可以用类似的办法!
[解决办法]
vc带运行时源码,可以参考一下