如何创建一个完整的C语言程序心得
2016-02-10 13:45
239 查看
首先说明一下,虽然题目逼格比较高,但是其实自己学的还是很不到位,所以只能把自己学到的东西简单写下来共大家改正。
首先初学c语言,一般创建的都是一个.c的文件,然后用编译器gcc之类的直接编译等,最后运行看结果。下面我写一个简单的程序说明如何写一个相对完整的c语言程序。
上面的程序虽然不完整,但是说明我们已经写了一个.c的文件。
小插曲:很多时候我们把自己写的函数放到main()函数后面,这样如果在前面不加一个函数声明,就会报错,这是因为编译器在main函数中看到这个函数时,编译器会先记下这个函数,但是会默认这个函数的返回值为int,当编译器真正看到函数时,发现这个函数和自己之前假设的函数返回值不一样,确是同名,这样就有问题了,所以我们要采用函数声明来告诉编译器这个函数的返回值是什么。
下面我就创建了一个.h的头文件叫做str_str.h,
里面写着
补充在主函数中写下:
现在我们要写str_str()函数的具体形式了
(再罗嗦几句,我们通常把一个.c的文件先编译成汇编语言的形式,再汇编成二进制目标文件,再链接所有的目标文件生成最后程序。)
把上面的文件保存在叫做str_str.c的文件中,这样我们创建了三个文件
c_learning.c(主函数) str_str.h(函数声明) str_str.c(函数定义)
下面采用makefile的形式进行编译等,这样做的好处是一旦个别文件修改,不用手动重新编译等操作,还是在同一个文件夹下创建文件
makefile(名字貌似不要改别的)
里面的内容如下
结束后,在linux的bash下运行make c_learning即可
总结一下,我们运用将主函数写在一个文件中,其余函数写在别的文件之中,并且自己写了一个头文件用于放置自己写的所有函数声明,并且使用了make方法节约时间,最终实现程序。
首先初学c语言,一般创建的都是一个.c的文件,然后用编译器gcc之类的直接编译等,最后运行看结果。下面我写一个简单的程序说明如何写一个相对完整的c语言程序。
[code]/* 程序的作用是从字符串中查找指定的子字符串个数,输入输出都采用自定义数据流 */ #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,
里面写着
[code]int str_str(char* ,char*);
补充在主函数中写下:
[code]#include"str_str.h" //采用双引号为相对路径,这就要求你写文件和主文件在同一文件夹下。
现在我们要写str_str()函数的具体形式了
(再罗嗦几句,我们通常把一个.c的文件先编译成汇编语言的形式,再汇编成二进制目标文件,再链接所有的目标文件生成最后程序。)
[code]#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(名字貌似不要改别的)
里面的内容如下
[code]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.c c_learning: str_str.o c_learning.o gcc str_str.o c_learning.o -o c_learning
结束后,在linux的bash下运行make c_learning即可
总结一下,我们运用将主函数写在一个文件中,其余函数写在别的文件之中,并且自己写了一个头文件用于放置自己写的所有函数声明,并且使用了make方法节约时间,最终实现程序。
相关文章推荐
- C/C++,笔试面试,多种方法求100以内的所有素数
- leetcode328题 题解 翻译 C语言版 Python版
- 第七章
- 第六章函数
- C、C++中命名规范
- 一起C语言中程序时序问题的排查过程
- c++ const关键字总结
- c++ static 关键字总结
- vs2013使用cdib.h和cdib.cpp所需的修改
- C语言实现牛顿迭代法解方程
- C语言实现牛顿迭代法解方程
- C语言实现牛顿迭代法解方程
- c++制作QQ轰炸机
- C++程序中哪些情况下变量会自动初始化
- 1007: C语言程序设计教程(第三版)课后习题5.5
- 1005: C语言程序设计教程(第三版)课后习题4.9
- C语言之归并排序
- C语言之归并排序
- C语言之归并排序
- C语言之插入排序