(一)前言
我们刚开始学习linux c的时候,一般都是在一个c文件里面写完所有程序,然后用gcc编译这个c文件就好了,十分简单。
但是你有没有想过,如果我们希望将不同模块的代码放到不同的c文件,然后最后编译成一个程序,这个时候又应该怎么办呢?
有人会说,怎么用这么麻烦,直接放在一个c文件里面就好了。但是你总是要考虑一下现实情况的多变性,虽然同时编译很多个c文件不好,但是只会编译一个c文件显得你很LOW。
(二)例子
具一个现实当中简单的例子
比如说我们要编译如下程序,程序当中有两个c文件。以下程序都是我在之前的博客发过的,大家如果很在意代码的意思的话,可以在之前的博客里面找一找。
main.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define MEM_PART "/proc/meminfo" #include "file.h" //用于存储内存信息的结构体 struct mem_info { char MemTotal[20]; char MemFree[20]; char MemAvailable[20]; char Buffers[20]; char Cached[20]; }; typedef struct mem_info MEM_info,*pMEM_info; //按行读取/proc/meminfo中的信息,并保存到mem结构体中 int get_mem_info(pMEM_info mem) { char buffer[300]; if(NULL==mem) { printf(" get_mem_info:param null! "); return 0; } memset(mem,0,sizeof(MEM_info)); if(1==get_file_line(buffer,MEM_PART,1))//读取第一行 { sscanf(buffer,"%*s %s",mem->MemTotal); if(1==get_file_line(buffer,MEM_PART,2))//读取第二行 { sscanf(buffer,"%*s %s",mem->MemFree); if(1==get_file_line(buffer,MEM_PART,3))//读取第三行 { sscanf(buffer,"%*s %s",mem->MemAvailable); if(1==get_file_line(buffer,MEM_PART,4))//读取第四行 { sscanf(buffer,"%*s %s",mem->Buffers); if(1==get_file_line(buffer,MEM_PART,5))//读取第五行 { sscanf(buffer,"%*s %s",mem->Cached); return 1; } } } } } return 0; } int main() { char result[3000]; char result2[100]; MEM_info mem; get_file_line(result,MEM_PART,1); sscanf(result,"%*s %s",result2); printf(" %s ",result); printf(" %s ",result2); get_mem_info(&mem); printf(" %s %s %s %s %s ",mem.MemTotal,mem.MemFree,mem.MemAvailable,mem.Buffers,mem.Cached); printf(" %s ",result); return 1; }
file.c
#include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include <string.h> #include <fcntl.h> #define FILEBUFFER_LENGTH 5000 #define EMPTY_STR "" //打开fileName指定的文件,从中读取第lineNumber行 //返回值:成功返回1,失败返回0 int get_file_line(char *result,char *fileName,int lineNumber) { FILE *filePointer; int i=0; char buffer[FILEBUFFER_LENGTH]; char *temp; memset(buffer,'