c语言怎么写出库函数,c库函数实现

怎么在c语言中自己写库函数

1、不同的系统开发函数库的具体步骤是不一样的,这主要决定于编译、链接环境。

站在用户的角度思考问题,与客户深入沟通,找到瀍河网站设计与瀍河网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站制作、成都外贸网站建设、企业官网、英文网站、手机端网站、网站推广、主机域名、虚拟空间、企业邮箱。业务覆盖瀍河地区。

2、不同的库开发方式也不一样,现在主流的库开发有两种,一种是静态库,一种是动态库,两者的本质区别是库代码是否和程序融合在一起,如果组装在一起就是静态库,如果不组装在一起,即为动态库,现在操作系统提供的多数是动态库,如Linux平台的.so文件,windows平台的DLL文件。

3、以Windows平台为例,用户可以通过Vc/vs等IDE集成开发环境,生成DLL工程,然后编写def文件进行导出。

求一个只用c语言编写的仓库管理系统

#includestdio.h

#includestdlib.h

#includestring.h

#includemalloc.h

#define max 32

int ifempty=0;//标志,判断链表是无否为空

typedef struct dnode /* 定义双向链表结构体 */ 

{

int number; /* 货物编号 */

char name[max]; /* 货物名称 */ 

int counter; /* 货物数量 */

struct dnode *prior, *next;

/* 定义两指针,分别指向其前驱和后继 */

}dlnode; 

dlnode *create(dlnode *L);

dlnode *input(dlnode *L);

dlnode *output(dlnode *L);

dlnode * outnum(dlnode *L);

dlnode * outname(dlnode *L);

dlnode *current(dlnode *L);

void search(dlnode *L);

void print(dlnode *L);

void searchnum(dlnode *L);

void searchname(dlnode *L);

void display(dlnode *L) ;

void main()

{

int x;

dlnode *L;

if(!(L=(dlnode *)malloc(sizeof(dlnode)))) //分配空间

{

printf("\n");

exit(1);

}

create(L);///调用函数,创建头节点

while(1)

{////////////////////////主菜单///////////////////////////

printf(" ============================\n");

printf(" 1. 货物出库和入库\n");

printf(" 2. 查找货物表\n"); 

printf(" 3. 显示仓库货物表\n");

printf(" 4. 输出到文件\n");

printf(" 0. 退出\n");

printf(" =============================\n");

printf(" 选择0--3:");

scanf("%d",x);

switch(x)

{

case 2:search(L);break;//调用查找函数

case 1:current(L);break;//调用入库出库函数

case 3:display(L);break;//调用显示输出函数

case 4:print(L);break;//调用打印函数

case 0:printf("\n bye!see you!\n");

getchar();getchar();exit(0);//退出程序

default:printf("\n Enter erreor!please input 0--4!"); 

getchar();getchar();

}

}

}

dlnode *create(dlnode *L)//创建链表头节点

{

printf(" 欢迎使用我的仓库管理系统");

getchar(); 

ifempty=0;

///////初始化头节点的值////////

L-next=NULL;L-prior=NULL;

L-number=L-counter=0;

strcpy(L-name," "); 

return L;

}

void search(dlnode *L) ///查找的主要菜单

{

int y;

if(ifempty==0)

{

printf("没有输入货物!\n");

getchar();getchar();

return;

}

else

{

while(1)

{

printf("=====================\n");

printf("1.按编号查询\n");

printf("2.按货物名称查询\n");

printf("0.返回上一层\n");

printf("====================\n");

printf("选择0--2:");

scanf("%d",y);

switch(y)

{

case 1:searchnum(L);break;//调用按编号查找的函数

case 2:searchname(L);break;//调用按名称查找的函数

case 0:return;//返回

default:printf("enter error!Please input 0--2!\n\n");

getchar();getchar();printf("\n\n");

}

}

}

}

void searchnum(dlnode *L)///按编号查找的函数

{

int num,flag=0;//flag为是否找到的标志

dlnode *head=L;

if(ifempty==0)

{

printf("没有货物被输入\n");

getchar();getchar();

return;

}

printf("输入你要查找的货物编号:\n");

scanf("%d",num);

while((L=L-next)!=head)

{

if(L-number==num)

{ flag=1;//flag为1时表示找到

printf("找到指定编号货物 \n"); 

printf("\n编号:%d\n",L-number);

printf("名称:%s\n",L-name) ;

printf("数量:%d\n\n",L-counter); 

}

if(flag==0)//flag为0时表示没有找到

printf("没有找到指定编号货物,请查看是否还有货物。\n");

getchar();getchar();

}

void searchname(dlnode *L)//按名称查找的函数

{

int flag=0;//flag为是否找到的标志

char na[32];

dlnode *head=L;

if(ifempty==0)

{

printf("没有货物被输入\n");

getchar();getchar();

return;

}

printf("输入你要查找的货物名称\n");

scanf("%s",na);

while((L=L-next)!=head)

{

if(strcmp(L-name,na)==0)

{ flag=1;//flag为1时表示找到

printf("找到指定名称货物 \n"); 

printf("\n编号:%d\n",L-number);

printf("名称:%s\n",L-name) ;

printf("数量:%d\n\n",L-counter); 

}

if(flag==0)//flag为0时表示没有找到

printf("没有找到指定编号货物,请查看是否还有货物。\n\n");

getchar();getchar();

}

dlnode *current(dlnode *L)//货物出库入库函数

{

int y;

while(1)

{

printf("========================\n");

printf(" 1.货物入库\n");

printf(" 2.货物出库\n");

printf(" 0.返回上一层\n");

printf("========================\n");

printf(" 选择0--2:");

scanf("%d",y);

switch(y)

{

case 1:input(L);break;//调用入库函数

case 2:output(L);break;//调用出库函数

case 0:return(L);//返回上一层

default:printf("enter error!Please input 0--2!");

getchar();getchar();

printf("\n\n");

}

}

}

dlnode *input(dlnode *L)//定义入库函数

{

dlnode *in,*head;

head=in=(dlnode *)malloc(sizeof(dlnode));//分配空间

head=L;

printf("\n请输入货物数据:\n");

printf("编号:");scanf("%d",in-number);

printf("名称:");scanf("%s",in-name);

printf("数量:");scanf("%d",in-counter);

if(L-next==NULL) //如果只有头节点,

{ //把刚输入的in节点

L-next=in; //跟在头节点后面

L-prior=in; //

in-next=L; //

in-prior=L; //

ifempty++; //ifempty加1

}

else

{//如果当前L的下一个节点不是头节点

while((L=L-next)!=head)

{//如果输入的数大于L-number,则插到L的前面

if(L-numberin-number)

{

in-next=L;

in-prior=L-prior; 

L-prior-next=in;

L-prior=in;

ifempty++; //ifempty加1

return(head);

}

//输入的编号比其它编号都小,则插到最后个节点,并首尾相连

head-prior-next=in;

in-prior=head-prior;

head-prior=in;

in-next=head;

ifempty++; //ifempty加1

return head;

}

dlnode *output(dlnode *L)//出库的函数

{

int y;

dlnode *head=L;

if(ifempty==0)//检测是否有货物输入

{

printf("没有货物输入系统\n");

getchar();getchar();

return(head);

while(1)

{

printf("=============\n");

printf("1.按编号出库\n");

printf("2.按名称出库\n");

printf("0.返回上一层\n");

printf("==============\n");

printf("选择0--2:");scanf("%d",y);

switch(y)

{

case 1:outnum(L);break;//调用按编号出库函数

case 2:outname(L);break;//调用按名称出库函数

case 0:return(L);

default:printf("enter error!Please input 0--2!");

getchar();getchar();printf("\n\n");

}

}

dlnode *outnum(dlnode *L)//按编号出库函数

int num;

dlnode *head=L;

printf("请输入出库货物的编号:");

scanf("%d",num);

while((L=L-next)!=head)

{//如果找到就删除节点

if(L-number==num)

{

L-prior-next=L-next;

L-next-prior=L-prior;

ifempty--; //ifempty减1 

printf("编号为%d的货物成功出库",num); 

getchar();getchar();

return head; 

}

printf("没有此编号的货物,请查看是否还有货物。\n\n");

getchar();getchar();

return (head);

}

dlnode *outname(dlnode *L)//按名称出库函数

{

char na[32];

dlnode *head=L;

printf("请输入出库货物的名称:");

scanf("%s",na);

while((L=L-next)!=head)

{//如果找到就删除节点

if(strcmp(L-name,na)==0)

{

L-prior-next=L-next;

L-next-prior=L-prior;

ifempty--; //ifempty减1 

printf("名称为%s的货物成功出库",na);

getchar();getchar();

return (head);

}

}

printf("没有此名称的货物,请查看是否还有货物。\n\n");

getchar();getchar();

return(head);

void display(dlnode *L)//显示货物清单

{

dlnode *head=L;

if(ifempty==0)

{

printf("没有货物可显示\n");

getchar();getchar();

return;

}

L=L-next;

do

printf("\n编号:%d\n",L-number);

printf("名称:%s\n",L-name) ;

printf("数量:%d\n\n",L-counter);

}while((L=L-next)!=head);

getchar();getchar(); 

}

void print(dlnode *L)

{

dlnode *head=L;

L=L-next;

char filename[max];

FILE *out;

if(ifempty==0)

{

printf("没有货物可输出\n");

getchar();getchar();

return;

}

printf("请输入文件名称:");

scanf("%s",filename);

if((out=fopen(filename,"w"))==NULL)

{

printf("打开文件失败!\n");

getchar();getchar();

return;

}

do{ 

fprintf(out,"编号:%d\n名称:%s\n数量:%d\n\n",L-number,L-name,L-counter);

}while((L=L-next)!=head);

printf("输出成功\n");getchar();getchar();

fclose(out);

}

C语言:如何自己做库函数?

简单的一个例子,但是基本的程序编译的思想都在里面了,具体的需要你自己体会和查资料

跟着下面的步骤走

------------------------

第一步:我的电脑-属性-高级-环境变量

添加3个变量

1.名字:path 值:vc的安装目录里面包含cl.exe的bin目录路径+";"+vc目录下包含mspdb80.dll的目录的路径

比如我的是D:\Program Files\Microsoft Visual Studio 8\VC\bin;D:\Program Files\Microsoft Visual Studio 8\Common7\IDE;

2.名字:include 值:vc安装目录下的include目录,主要是为了找到头文件,我的是D:\Program Files\Microsoft Visual Studio 8\VC\include;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include;

3.名字:lib 值:vc目录下包含库文件的目录路径

我的是D:\Program Files\Microsoft Visual Studio 8\VC\lib;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib;

第二步:需要下面两个文件

//-------------libdemo.c

#include stdio.h

void lib_func()

{

printf("this routine in lib\n");

}

//------------main.c

void lib_func();

int main(int argc, char *argv[])

{

lib_func();

}

第三步:命令

cl /c libdemo.c '编译libdemo.c 生成libdemo.obj

lib libdemo.obj '生成libdemo.lib 库文件

cl /c main.c '编译main.c

link main.obj libdemo.lib '生成main.exe

---------------------------------------------------

呵呵 加点东西,参看4楼的建议,在做个dll,COM组件就不做了,有点复杂了

1。把libdemo.c 稍微改下

//-------------libdemo.c

#include stdio.h

__declspec (dllexport) void lib_func()

{

printf("this routine in lib\n");

}

2。命令

cl /c libdemo.c main.c

link libdemo.obj /dll '生成libdemo.lib

link main.obj libdemo.lib

关于c语言中如何创建自己的库函数能不能再详细的解释一下,谢谢了!!!

哈哈,选我吧!库分静态库和动态链接库,静态库以lib结尾,被编译器里的链接器识别。windows下动态库以dll结尾,被操作系统加载以模块方式映射到进程地址空间。一般初学者先学会创建的是静态库。静态库是一个无需重定位的函数集。怎么做到无需重定位呢?这是编译器做的编译工作,例如它指定开头的位置作为基址,剩下的代码用到的都是相对偏移。这样,这段二进制代码可以被放在内存中的任何位置执行,被写入了lib文件里。在lib文件里,包含了函数名与函数地址组成的结构体,通过它编译器可以找到lib文件里需要的二进制代码并以静态联编的方式写入我们调用它的exe文件里。这种代码是被塞进exe文件里而无需修改,并在程序执行时被用到。为了让库被别人调用,我们可以写一个头文件.h,包含函数原型及声明。


网站栏目:c语言怎么写出库函数,c库函数实现
当前网址:http://scyanting.com/article/phjjcc.html