如何创建一个完整的C语言程序心得

来源:互联网 发布:ubuntu安装配置samba 编辑:程序博客网 时间:2024/05/29 18:47

首先说明一下,虽然题目逼格比较高,但是其实自己学的还是很不到位,所以只能把自己学到的东西简单写下来共大家改正。

首先初学c语言,一般创建的都是一个.c的文件,然后用编译器gcc之类的直接编译等,最后运行看结果。下面我写一个简单的程序说明如何写一个相对完整的c语言程序。

/*程序的作用是从字符串中查找指定的子字符串个数,输入输出都采用自定义数据流*/#include<stdio.h>/*#include说明函数要包括头文件stdio.h,这个是用绝对路径查找的,由于系统环境变量PATH中包括了这个文件的位置,所以可以这么写。*/int main(){ FILE *infile=fopen("primitive_data","r");FILE*outfile_data_one=fopen("organzised_data_one","w");char str1[50];fscanf(infile,"%s",str1);fprintf(outfile_data_one,"%i\n",str_str(str1,"eo"));/*这里str_str()函数是我自己写的一个,函数的作用是找出是str1字符串之中有多少个“eo”,这样的子字符串出现,返回出现的个数,具体的函数我后面再写,先假设写好了*/fclose(infile);fclose(outfile_data_one);}

上面的程序虽然不完整,但是说明我们已经写了一个.c的文件。
小插曲:很多时候我们把自己写的函数放到main()函数后面,这样如果在前面不加一个函数声明,就会报错,这是因为编译器在main函数中看到这个函数时,编译器会先记下这个函数,但是会默认这个函数的返回值为int,当编译器真正看到函数时,发现这个函数和自己之前假设的函数返回值不一样,确是同名,这样就有问题了,所以我们要采用函数声明来告诉编译器这个函数的返回值是什么。

下面我就创建了一个.h的头文件叫做str_str.h,
里面写着

int str_str(char* ,char*);

补充在主函数中写下:

#include"str_str.h"//采用双引号为相对路径,这就要求你写文件和主文件在同一文件夹下。

现在我们要写str_str()函数的具体形式了
(再罗嗦几句,我们通常把一个.c的文件先编译成汇编语言的形式,再汇编成二进制目标文件,再链接所有的目标文件生成最后程序。)

#include"str_str.h"#include<string.h>int str_str(char *str1,char *str2){  int count=0;  char *buff=NULL;  while(strstr(str1,str2)!=NULL)   {     count++;     buff=strstr(str1,str2);      strcpy(str1,buff+1);   }  return count;}/*strstr()函数和strcpy()函数是string.h里申明的函数,strstr(char *str1,char *str2)的作用是在str1中查找str2字串,如果有返回其在str1中的位置指针。*/

把上面的文件保存在叫做str_str.c的文件中,这样我们创建了三个文件
c_learning.c(主函数) str_str.h(函数声明) str_str.c(函数定义)
下面采用makefile的形式进行编译等,这样做的好处是一旦个别文件修改,不用手动重新编译等操作,还是在同一个文件夹下创建文件
makefile(名字貌似不要改别的)
里面的内容如下

c_learning.o(目标文件): c_learning.c str_str.c str_str.h(所需文件)    gcc -c c_learning.c(生成方法)//gcc前面是tab键str_str.o: str_str.c str_str.h    gcc -c str_str.cc_learning: str_str.o c_learning.o    gcc str_str.o c_learning.o -o c_learning

结束后,在linux的bash下运行make c_learning即可

总结一下,我们运用将主函数写在一个文件中,其余函数写在别的文件之中,并且自己写了一个头文件用于放置自己写的所有函数声明,并且使用了make方法节约时间,最终实现程序。

1 0
原创粉丝点击