当前位置:首页 > 代码 > 正文

c函数库源代码(c++代码库)

admin 发布:2022-12-19 21:20 106


本篇文章给大家谈谈c函数库源代码,以及c++代码库对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

在C语言里,关于库函数中各种数学函数的代码。

你说的就是库函数的源码,也就是glibc,源码在可以下到,比如下载,打开后就可以看到你需要的各种库的具体实现代码,比如在string中的strcat.c中就有

char *strcat (dest, src)

     char *dest;

     const char *src;

{

  char *s1 = dest;

  const char *s2 = src;

  reg_char c;

  /* Find the end of the string.  */

  do

    c = *s1++;

  while (c != '\0');

  /* Make S1 point before the next character, so we can increment

     it while memory is read (wins on pipelined cpus).  */

  s1 -= 2;

  do

    {

      c = *s2++;

      *++s1 = c;

    }

  while (c != '\0');

  return dest;

}

如何查看C语言,内库的源代码?

如果是“.cpp”文件并且有VC++的环境,可直接双击文件打开或者先打开编译环境,在新建一个控制台下的源文件,然后,选择file菜单下的open找到你的文件导入,然后编译运行;如果是其他格式的,如txt文件,也可先打开编译环境,新建一个控制台下的源文件,然后直接复制粘贴进去,然后编译运行;

便已运行的操作如图:

求C语言标准函数库的源代码

标准库只是定义接口,具体怎么实现就得看操作系统,你说win下和linux下这些函数的实现会一样吗。当然不一样,看这些学源码,不如看看c标准,c89或c99.

那可以看内核,看系统调用是怎么样实现的,你说的那些都是基于系统调用的

如何看c语言标准库函数的源代码?

很遗憾,标准库中的函数结合了系统,硬件等的综合能力,是比较近机器的功能实现,所以大部分是用汇编完成的,而且已经导入到了lib和dll里了,就是说,他们已经被编译好了,似乎没有代码的存在了.

能看到的也只有dll中有多少函数被共享.

第三方可能都是dll,因为上面也说了,dll是编译好的,只能看到成品,就可以隐藏代码,保护自己的知识产权,同时也是病毒的归宿...... 当然,除了DLL的确还存在一种东西,插件程序~~~

c库函数源码

不是你表达不清,也许只是你根本不想仔细看一睛VC下面目录的源码,事实上就是有的。后附其中的qsort.c,以证明所言不虚。

VC的库是提供源码的,这东西也不值钱。

X:\Program Files\Microsoft Visual Studio\VCXX\CRT\SRC

注意有些可能本身是用汇编写的。

/***

*qsort.c - quicksort algorithm; qsort() library function for sorting arrays

*

* Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.

*

*Purpose:

* To implement the qsort() routine for sorting arrays.

*

*******************************************************************************/

#include cruntime.h

#include stdlib.h

#include search.h

/* prototypes for local routines */

static void __cdecl shortsort(char *lo, char *hi, unsigned width,

int (__cdecl *comp)(const void *, const void *));

static void __cdecl swap(char *p, char *q, unsigned int width);

/* this parameter defines the cutoff between using quick sort and

insertion sort for arrays; arrays with lengths shorter or equal to the

below value use insertion sort */

#define CUTOFF 8 /* testing shows that this is good value */

/***

*qsort(base, num, wid, comp) - quicksort function for sorting arrays

*

*Purpose:

* quicksort the array of elements

* side effects: sorts in place

*

*Entry:

* char *base = pointer to base of array

* unsigned num = number of elements in the array

* unsigned width = width in bytes of each array element

* int (*comp)() = pointer to function returning analog of strcmp for

* strings, but supplied by user for comparing the array elements.

* it accepts 2 pointers to elements and returns neg if 12, 0 if

* 1=2, pos if 12.

*

*Exit:

* returns void

*

*Exceptions:

*

*******************************************************************************/

/* sort the array between lo and hi (inclusive) */

void __cdecl qsort (

void *base,

unsigned num,

unsigned width,

int (__cdecl *comp)(const void *, const void *)

)

{

char *lo, *hi; /* ends of sub-array currently sorting */

char *mid; /* points to middle of subarray */

char *loguy, *higuy; /* traveling pointers for partition step */

unsigned size; /* size of the sub-array */

char *lostk[30], *histk[30];

int stkptr; /* stack for saving sub-array to be processed */

/* Note: the number of stack entries required is no more than

1 + log2(size), so 30 is sufficient for any array */

if (num 2 || width == 0)

return; /* nothing to do */

stkptr = 0; /* initialize stack */

lo = base;

hi = (char *)base + width * (num-1); /* initialize limits */

/* this entry point is for pseudo-recursion calling: setting

lo and hi and jumping to here is like recursion, but stkptr is

prserved, locals aren't, so we preserve stuff on the stack */

recurse:

size = (hi - lo) / width + 1; /* number of el's to sort */

/* below a certain size, it is faster to use a O(n^2) sorting method */

if (size = CUTOFF) {

shortsort(lo, hi, width, comp);

}

else {

/* First we pick a partititioning element. The efficiency of the

algorithm demands that we find one that is approximately the

median of the values, but also that we select one fast. Using

the first one produces bad performace if the array is already

sorted, so we use the middle one, which would require a very

wierdly arranged array for worst case performance. Testing shows

that a median-of-three algorithm does not, in general, increase

performance. */

mid = lo + (size / 2) * width; /* find middle element */

swap(mid, lo, width); /* swap it to beginning of array */

/* We now wish to partition the array into three pieces, one

consisiting of elements = partition element, one of elements

equal to the parition element, and one of element = to it. This

is done below; comments indicate conditions established at every

step. */

loguy = lo;

higuy = hi + width;

/* Note that higuy decreases and loguy increases on every iteration,

so loop must terminate. */

for (;;) {

/* lo = loguy hi, lo higuy = hi + 1,

A[i] = A[lo] for lo = i = loguy,

A[i] = A[lo] for higuy = i = hi */

do {

loguy += width;

} while (loguy = hi comp(loguy, lo) = 0);

/* lo loguy = hi+1, A[i] = A[lo] for lo = i loguy,

either loguy hi or A[loguy] A[lo] */

do {

higuy -= width;

} while (higuy lo comp(higuy, lo) = 0);

/* lo-1 = higuy = hi, A[i] = A[lo] for higuy i = hi,

either higuy = lo or A[higuy] A[lo] */

if (higuy loguy)

break;

/* if loguy hi or higuy = lo, then we would have exited, so

A[loguy] A[lo], A[higuy] A[lo],

loguy hi, highy lo */

swap(loguy, higuy, width);

/* A[loguy] A[lo], A[higuy] A[lo]; so condition at top

of loop is re-established */

}

/* A[i] = A[lo] for higuy i = hi,

A[i] = A[lo] for lo = i loguy,

higuy loguy, lo = higuy = hi

implying:

A[i] = A[lo] for loguy = i = hi,

A[i] = A[lo] for lo = i = higuy,

A[i] = A[lo] for higuy i loguy */

swap(lo, higuy, width); /* put partition element in place */

/* OK, now we have the following:

A[i] = A[higuy] for loguy = i = hi,

A[i] = A[higuy] for lo = i higuy

A[i] = A[lo] for higuy = i loguy */

/* We've finished the partition, now we want to sort the subarrays

[lo, higuy-1] and [loguy, hi].

We do the smaller one first to minimize stack usage.

We only sort arrays of length 2 or more.*/

if ( higuy - 1 - lo = hi - loguy ) {

if (lo + width higuy) {

lostk[stkptr] = lo;

histk[stkptr] = higuy - width;

++stkptr;

} /* save big recursion for later */

if (loguy hi) {

lo = loguy;

goto recurse; /* do small recursion */

}

}

else {

if (loguy hi) {

lostk[stkptr] = loguy;

histk[stkptr] = hi;

++stkptr; /* save big recursion for later */

}

if (lo + width higuy) {

hi = higuy - width;

goto recurse; /* do small recursion */

}

}

}

/* We have sorted the array, except for any pending sorts on the stack.

Check if there are any, and do them. */

--stkptr;

if (stkptr = 0) {

lo = lostk[stkptr];

hi = histk[stkptr];

goto recurse; /* pop subarray from stack */

}

else

return; /* all subarrays done */

}

/***

*shortsort(hi, lo, width, comp) - insertion sort for sorting short arrays

*

*Purpose:

* sorts the sub-array of elements between lo and hi (inclusive)

* side effects: sorts in place

* assumes that lo hi

*

*Entry:

* char *lo = pointer to low element to sort

* char *hi = pointer to high element to sort

* unsigned width = width in bytes of each array element

* int (*comp)() = pointer to function returning analog of strcmp for

* strings, but supplied by user for comparing the array elements.

* it accepts 2 pointers to elements and returns neg if 12, 0 if

* 1=2, pos if 12.

*

*Exit:

* returns void

*

*Exceptions:

*

*******************************************************************************/

static void __cdecl shortsort (

char *lo,

char *hi,

unsigned width,

int (__cdecl *comp)(const void *, const void *)

)

{

char *p, *max;

/* Note: in assertions below, i and j are alway inside original bound of

array to sort. */

while (hi lo) {

/* A[i] = A[j] for i = j, j hi */

max = lo;

for (p = lo+width; p = hi; p += width) {

/* A[i] = A[max] for lo = i p */

if (comp(p, max) 0) {

max = p;

}

/* A[i] = A[max] for lo = i = p */

}

/* A[i] = A[max] for lo = i = hi */

swap(max, hi, width);

/* A[i] = A[hi] for i = hi, so A[i] = A[j] for i = j, j = hi */

hi -= width;

/* A[i] = A[j] for i = j, j hi, loop top condition established */

}

/* A[i] = A[j] for i = j, j lo, which implies A[i] = A[j] for i j,

so array is sorted */

}

/***

*swap(a, b, width) - swap two elements

*

*Purpose:

* swaps the two array elements of size width

*

*Entry:

* char *a, *b = pointer to two elements to swap

* unsigned width = width in bytes of each array element

*

*Exit:

* returns void

*

*Exceptions:

*

*******************************************************************************/

static void __cdecl swap (

char *a,

char *b,

unsigned width

)

{

char tmp;

if ( a != b )

/* Do the swap one character at a time to avoid potential alignment

problems. */

while ( width-- ) {

tmp = *a;

*a++ = *b;

*b++ = tmp;

}

}

关于c函数库源代码和c++代码库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/24699.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载