C语言学习012:将代码文件分成多个文件
如果将所有的代码都写到一个文件中,当对于小项目来说不会有什么问题,但是当它一个很大的工程的时候,如果将所有代码都写到一个文件中,不但开发起来很困难,维护更是头疼,所以我们应该将代码按不同的功能分别建立相应的代码文件,下面我们将program.c的代码分成多个文件
#include <stdio.h> int main(){
int n=;
int m=;
int result;
result=add(n,m);
printf("n+m=%i\n",result);
result=sub(n,m);
printf("n-m=%i\n",result);
return ;
} int add(int n,int m){
return n+m;
} int sub(int n,int m){
return n-m;
}
首先,我们将功能代码放到另一个文件cal.c文件中
#include "cal.h" int add(int n,int m){
return n+m;
} int sub(int n,int m){
return n-m;
}
然后将函数声明放在另一个文件cal.h头文件中
int add(int n,int m);
int sub(int n,int m);
现在我们再来看主程序中该怎么去调用这些方法
#include <stdio.h>
#include "cal.h" int main(){
int n=;
int m=;
int result;
result=add(n,m);
printf("n+m=%i\n",result);
result=sub(n,m);
printf("n-m=%i\n",result);
return ;
}
只需在主程序文件开头处引用"cal.h"头文件就行,注意这里的cal.h头文件是用双引号而不是<>括号;
通过双引号引用的头文件是程序的相对路径,而通过尖括号引用的是程序的绝对路径
最后,我们来看看该如何编译多个文件的程序,其实和和编译单个文件没有多大区别,就是在gcc后面逐个添加c文件
aaarticlea/png;base64,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" alt="" />
C语言学习012:将代码文件分成多个文件的更多相关文章
- R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...
- R语言学习笔记(十五):获取文件和目录信息
file.info() 参数是表示文件名称的字符串向量,函数会给出每个文件的大小.创建时间.是否为目录等信息. > file.info("z.txt") size isdir ...
- 笨办法学习python3练习代码ex20.py 函数和文件
注意,还要在python3,就是ex20.py的同目录里面直接创建一个ex20.txt的文件.里面至少要有三行内容 #函数和文件 #readline:只读取文本文件的一行 #seek(0):将读写位置 ...
- c语言学习之结构篇代码演示样例-输入n个同学的姓名,数学英语成绩,依照平均分从低到高排序并输出
#include<stdio.h> void main(){ const int count = 5;//定义数量 struct student{ char name[80]; float ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- C语言学习008:标准错误
在上一节中的数据文件中(C语言学习007:重定向标准输入和输出),如果文件中的数据包含非法数据,如何让程序显示一条错误的提示消息呢?就需要用到标准错误 #include <stdio.h> ...
- C# 好代码学习笔记(1):文件操作、读取文件、Debug/Trace 类、Conditional条件编译、CLS
目录 1,文件操作 2,读取文件 3,Debug .Trace类 4,条件编译 5,MethodImpl 特性 5,CLSCompliantAttribute 6,必要时自定义类型别名 目录: 1,文 ...
- 一份关于Swift语言学习资源的整理文件
一份关于Swift语言学习资源的整理文件 周银辉 在这里下载 https://github.com/ipader/SwiftGuide
- c语言学习之基础知识点介绍(十六):文件操作
一.文件的分类 1.文本文件:打开之后能看得懂的文件 2.二进制文件:打开之后看不懂,类似乱码之类的文件(视频,音频打开之后,能看.听,是应为电脑中装有播放器,播放器中含有解码器). 二.操作文件的步 ...
随机推荐
- 渣渣小本求职复习之路每天一博客系列——Unix&Linux入门(5)
前情回顾:昨天简单地介绍了一下如何使用vi编辑器,例如命令模式和插入模式的切换,以及一些简单命令的讲解. —————————————————————————直接就开始吧———————————————— ...
- python sorted排序
python sorted排序 Python不仅提供了list.sort()方法来实现列表的排序,而且提供了内建sorted()函数来实现对复杂列表的排序以及按照字典的key和value进行排序. s ...
- jquery获取checkbox的值并post提交
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- common-dbcp2数据库连接池参数说明
参数 默认值 描述 建议值 DefaultAutoCommit null 通过这个池创建连接的默认自动提交状态.如果不设置,则setAutoCommit 方法将不被调用. true Default ...
- Vue.js线程机制问题还是数据双向绑定有延迟的问题
最近用select2做一个下拉多选,若只是从后端获取一个列表渲染还好说,没有任何问题.但要用select2对数据初始化时进行selected的默认选项进行显示,就出现问题了. vm.$set('are ...
- MVVM架构~knockoutjs系列之验证信息自定义输出
返回目录 这个文章非常重要,也是非常必要的,在我们进行项目开发时,后台无所谓,对样式无要求,而网站前台来说,对样式要求严格,你的验证信息都是前台设计好的,所以,不能使用knockoutjs自带的了,我 ...
- 爱上MVC系列~前端验证与后端数据有效性验证
回到目录 有一句话,在10年前就是真理,到现在也一直都是,“前端验证可以没有,但后端验证必须要有”,这句话相信大家都没有意见吧,前端验证一般指通过JS方式实现的,友好的,个性的验证方式,而后端验证是指 ...
- atitit。ocr框架类库大全 attilax总结
atitit.ocr框架类库大全 attilax总结 Tesseract Asprise JavaOCR 闲来无事,发现百度有一个OCR文字识别接口,感觉挺有意思的,拿来研究一下. 百度服务简介:文字 ...
- Atiti attilax主要成果与解决方案与案例rsm版
Atiti attilax主要成果与解决方案与案例rsm版 1. ##----------主要成果与解决方案与 参与项目1 ###开发流程系列1 ###架构系列 (au1 ###编程语言系列与架构系 ...
- paip.2013年技术趋势以及热点 v2.0 cae
paip.2013年技术趋势以及热点 v2.0 cae HTML5 多核编程 物联网 可穿戴计算设备 3. 物联网 无论是M2M(机器对机器)通信应用,还是NFC(进距离通信)技术,都是物联网的组成部 ...