如果将所有的代码都写到一个文件中,当对于小项目来说不会有什么问题,但是当它一个很大的工程的时候,如果将所有代码都写到一个文件中,不但开发起来很困难,维护更是头疼,所以我们应该将代码按不同的功能分别建立相应的代码文件,下面我们将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:将代码文件分成多个文件的更多相关文章

  1. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  2. R语言学习笔记(十五):获取文件和目录信息

    file.info() 参数是表示文件名称的字符串向量,函数会给出每个文件的大小.创建时间.是否为目录等信息. > file.info("z.txt") size isdir ...

  3. 笨办法学习python3练习代码ex20.py 函数和文件

    注意,还要在python3,就是ex20.py的同目录里面直接创建一个ex20.txt的文件.里面至少要有三行内容 #函数和文件 #readline:只读取文本文件的一行 #seek(0):将读写位置 ...

  4. c语言学习之结构篇代码演示样例-输入n个同学的姓名,数学英语成绩,依照平均分从低到高排序并输出

    #include<stdio.h> void main(){ const int count = 5;//定义数量 struct student{ char name[80]; float ...

  5. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  6. C语言学习008:标准错误

    在上一节中的数据文件中(C语言学习007:重定向标准输入和输出),如果文件中的数据包含非法数据,如何让程序显示一条错误的提示消息呢?就需要用到标准错误 #include <stdio.h> ...

  7. C# 好代码学习笔记(1):文件操作、读取文件、Debug/Trace 类、Conditional条件编译、CLS

    目录 1,文件操作 2,读取文件 3,Debug .Trace类 4,条件编译 5,MethodImpl 特性 5,CLSCompliantAttribute 6,必要时自定义类型别名 目录: 1,文 ...

  8. 一份关于Swift语言学习资源的整理文件

    一份关于Swift语言学习资源的整理文件     周银辉 在这里下载 https://github.com/ipader/SwiftGuide

  9. c语言学习之基础知识点介绍(十六):文件操作

    一.文件的分类 1.文本文件:打开之后能看得懂的文件 2.二进制文件:打开之后看不懂,类似乱码之类的文件(视频,音频打开之后,能看.听,是应为电脑中装有播放器,播放器中含有解码器). 二.操作文件的步 ...

随机推荐

  1. js跨浏览器的事件处理函数

    /* 跨浏览器的事件处理函数 */ var EventUtil = { addHandler : function(element,type,handler){ if(element.addEvent ...

  2. 线程池ThreadPool知识碎片和使用经验速记

    ThreadPool(线程池)大概的工作原理是,初始时线程池中创建了一些线程,当应用程序需要使用线程池中的线程进行工作,线程池将会分配一个线程,之后到来的请求,线程池都会尽量使用池中已有的这个线程进行 ...

  3. SSM 三大框架整合

    上一篇已经讲了整个各个子模块的创建过程以及它们之间的依存关系, 那么这一篇就来正式的整合三大框架(SSM)了. 1, 准备环境1.1 为每个War包工程创建一个Server 那么 添加了Server后 ...

  4. git查看日志

    git查看日志 git log -n 显示前N条记录 git log -3 退出log命令 直接输入: q git log --stat -n 显示提交的文件的简要的修改统计 $ git log -- ...

  5. SQLServer查看死锁

    SQLServer查看死锁 if exists ( select * from sys.procedures where name like '%USP_ShowLocks%' ) drop proc ...

  6. XML学习笔记4——XSD简单数据类型

    XSD提供了数据类型,并且支持自定义数据类型,但这一切都是建立在XSD内置数据类型和一套扩展内置数据类型的规则基础之上的,在这一篇笔记中,就来看看XSD中的数据类型. 1.XSD数据类型图 先看一下数 ...

  7. 通过shape-outside来设置文字环绕时的形状

    现在真是越来越注重用户体验了,而"shape-outside"就是其中一个能让网页排版更友好的一个属性. 默认文字是根据图片的边进行的. 但现在我们完全有能力去改变这一行为,下面是 ...

  8. Android入门(三)Activity-生命周期与启动模式

    原文链接:http://www.orlion.ga/432/ 一.活动的生命周期 1.返回栈 Android中的活动是可以重叠的,我们每启动一个新的活动,就会覆盖在原活动之上,然后点击Back键会销毁 ...

  9. javascript基础语法——表达式

    × 目录 [1]原始表达式 [2]复杂表达式 前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句.但是,其实还有一个术语经常使用,却很少被提到,这就是javascr ...

  10. Android点击效果

    我们在开发网站时,会发现当我们添加<a/>标签后,标签有一个点击效果,比如颜色变化,这样开看起来用户体验会很棒,那么在我们的Android开发中如何加入这样的效果呢?本篇就为大家揭开它的神 ...