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

Python015

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

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

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

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

数字版“拼图”游戏C源代码:

#include<time.h>

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<windows.h>

int i, j, r, k    //i、j、r用于循环, k存放随机数值

int m, n    // m、n是当前空位的下标, t标记排序是否成功

int a[4][4]   //存储4×4共16个数字数组

void show(void)    //输出数组表格

void csh(void)   //初始化界面

int  yes(void)     //判断排序是否成功

void up(void)      //数字向上移动到空位(空位则下移)

void down(void)  //数字向下移

void left(void)   //数字向左移

void rght(void)  //数字向右移

void inkey(void)   //按键操作

void gtxy(int x, int y) //控制光标移动的函数

int main(void)

{ while(1)

{csh( )

      while(1)

        { inkey()

         show()

         if ( yes( ) )

            {gtxy(6,12)printf("你成功了! 再来一局y/n?")break}

      }

    if(getch( )== ʹnʹ)break

    }

return 0

}

void csh(void)

{ r=0

CONSOLE_CURSOR_INFO cursor_info={1,0}  //以下两行是隐藏光标的设置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info)

for(i=0i<4i++)   //给数组a依序赋值

for(j=0j<4j++)

{ if (i==3 &&j==3) a[i][j]=0

else  a[i][j]=1+r++

}

a[3][3]=a[1][1]a[1][1]=0 //把a[3][3]与a[1][1]的值交换一下

m=1n=1

srand((unsigned)time(0))  //初始化随机数发生器

for(r=0r<500r++)    //将数组各值打乱

{ k=rand( )%(4)     //取0-3随机数,分别代表上下左右四个方向

switch(k)

{ case 0: { up( ) break}

case 1: {down( ) break}

case 2: { left( ) break}

case 3: { rght( )break}

}

}

printf("\n\n\t\t   数字拼图")

printf("\n\t┌──────┬──────┬──────┬──────┐")

printf("\n\t│      │      │      │      │")

printf("\n\t├──────┼──────┼──────┼──────┤")

printf("\n\t│      │      │      │      │")

printf("\n\t├──────┼──────┼──────┼──────┤")

printf("\n\t│      │      │      │      │")

printf("\n\t├──────┼──────┼──────┼──────┤")

printf("\n\t│      │      │      │      │")

printf("\n\t└──────┴──────┴──────┴──────┘")

show( )

}

void show(void)

{for(i=0i<4i++)

for(j=0j<4j++)  //gtxy(7*j+9, 2*i+4)是光标到指定位置输出数字

{gtxy(7*j+9,2*i+4)if(a[i][j]==0)printf("      │")

else if(a[i][j]>9)printf("  %d  │",a[i][j])

else printf("   %d  │",a[i][j])

}

}

void inkey(void)

{ int key

key=getch( )

switch(key)

{ case 72: { up( )break }

case 80: {down( )break}

case 75: {left( )break}

case 77: { rght( ) break }

}

}

void up(void)

{ if (m!=3)        //移动时要考虑空位"0"是否已经在边界

{ a[m][n]=a[m+1][n] m++a[m][n]=0}

}

void down(void)

{ if (m!=0)

{a[m][n]=a[m-1][n] m--a[m][n]=0}

}

void left(void)

{ if (n!=3)

{ a[m][n]=a[m][n+1]n++a[m][n]=0 }

}

void rght(void)

{ if (n!=0)

{ a[m][n]=a[m][n-1]n--a[m][n]=0}

}

int yes(void)

{ r=0

for(i=0i<4i++)

for(j=0j<4j++)

{ if (a[i][j]!=1+r++) return (r==16)?1:0}

}

void gtxy(int x, int y)  //控制光标移动的函数

{ COORD coord

coord.X = x

coord.Y = y

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord)

}