IOS学习入门准备-C—_2

用命令行编译C文件我们已经知道了

简单谈一下他的编译过程..

首先我们创建了test.c的C文件 也就是源文件, 接着预编译,再由编译器编译为汇编代码,

汇编器把汇编代码编译为目标文件(.o),最后由连接器把所有目标文件与库文件连接起来生成可执行文件

源文件->预编译文件->汇编代码文件->目标文件->链接后生成可执行文件;

下面学习头文件与实现文件的意义

我们都知道C语言编程第一行是什么呢

1 #include <stdio.h>
2 int main(){
3  printf("Hellow Word");
4 }

是的,是#include导入头文件  大家可以试试把第一行去掉

gcc 编译是不是error了?错误提示告诉你printf函数不存在  是的,这个打印输出只是<stdio.h>库文件里的一个方法,所以必须导入库文件。

如果我们自己编译的程序有几千行甚至更多..都写在一个test.c那么维护起来是不是很麻烦?代码重用性也很低..

对于这种问题头文件和实现文件就能很好地解决了

头文件是以.h结尾的文件 它的作用相当于其他语言的说明文档..头文件内只是声明属性,变量或方法并不去实现

那么如何实现这些方法呢?都写在实现文件.c里面  当然 两个文件的文件名是相同的  只是后缀不同

我们来做个例子..

创建头文件testA.h代码只有一行  声明一个sum方法;

1 int sum(int,int);

创建实现文件testA.c实现这个方法;

1 int sum(int i,int j)
2 {
3     return i+j;
4 }

创建测试文件test.c

1 #include <stdio.h>
2 #include "testA.h"
3 int main(){
4      int m = 5;
5      int n = 6;
6      int result = sum(m,n);
7     printf("%d\n",result);
8 }

编译运行 gcc -o test test.c testA.c

头文件是不需要编译的  但是实现文件需要跟测试文件一起进行连接  也可以先把实现文件编译成目标文件

gcc -c testA.c//得到目标文件testA.o

gcc -o test test.c testA.o

运行test.exe可以看到result输出了sum方法的返回值11;

可能有人会问 有实现文件实现方法就可以了 为什么要头文件呢   直接导入实现文件testA.c不可以吗?

当然不是不可以,直接#include "testA.c"导入实现文件不用头文件也是可以的;但头文件的意义何在呢?

这里就要讲到一个依赖倒转的理念了..依赖倒转是指:高层如果依赖于底层的话底层改变,高层也不得不改变,

那么代码维护和重用重用性就大大降低了,所以高层都应该依赖于抽象而不是底层这是依赖倒转原则。

只是这样说的话很多人可能不理解..我们来做个例子..

假设有两个实现文件testA.c,testB.c,各自对应头文件testA.h,testB.h

且testA.h依赖于testB.h

testA.c

int sum(int i,int j)
{
    return i+j;
}
int MULT (int i,int j)
{
    return MULTB(i,j);
}    

testA.h

#include "testB.h"
int sum(int,int);
int MULT (int,int);

testB.c

1 int MULTB(int i,int j)
2 {
3     return i*j;
4 }    

testB.h

int MULTB(int,int);

test.c

1 #include <stdio.h>
2 #include "testA.c"
3 int main(){
4      int m = 5;
5      int n = 6;
6      int result = MULT(m,n);
7      printf("%d\n",result);
8 }

可以看到testA.c的MULT()方法是依赖于testB.c的MULTB()方法实现的;

我们先来把testA.c,testB.c都编译为目标文件

gcc -c testA.c testB.c//得到testA.o,testB.o两个目标文件

再把目标文件与测试文件链接

gcc test.c testA.o testB.o//生成可执行文件

可以看到testA.c的头文件依赖于testB.c的头文件实现了MULT()方法

如果对testB.c的方法进行修改呢

testB.c

1 int MULTB(int i,int j)
2 {
3     return i+j;
4 }    

我们把乘法改成了除法  重新把testB.c编译成目标文件:gcc -c testB.c

再次链接生成可执行文件:gcc test.c testA.o testB.o

可以看到testA.o并没有重新编译  但testA.c的MULT()方法又是依赖于testB.c 为什么testA.c不用重新编译呢?

因为依赖所写是在头文件  程序通过头文件找到.o文件..头文件相当于声明了一个抽象方法..具体实现要看实现类怎么写

也就是说testA.c的MULT()方法是依赖于testB.h内的一个抽象方法,所以即使testB.c改变了,testA.c依然能使用而不用重新编译。

下面大家做一个测试

有A.c,B.c两个实现文件(内容随意)分别对应A.h,B.h两个头文件..

文件A.h依赖于文件B.h,文件B.h又依赖于文件A.h

test.c测试#include导入A.h 编译运行

时间: 2024-11-05 18:47:51

IOS学习入门准备-C—_2的相关文章

这可能是最详细的 iOS 学习入门指南(含书目/文档/学习资料)

1 零基础小白如何进行 iOS 系统学习 首先,学习目标要明确: 其次,有了目标,要培养兴趣,经常给自己一些正面的反馈,比如对自己的进步进行鼓励,在前期小步快走: 再次,学技术最重要的一点就是多动手. 推荐书目: <Objective-C 基础教程> <iOS 编程> <iOS 开发指南> 推荐两个开源的 APP:SegmentFault.懒人笔记 2 基础入门后,如何进行高级进阶 2.1 原理和基础:掌握扎实的原理和基础是进阶的必要条件 首先是语言.入门时候可能只要对

转: ios学习入门进阶

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:利炳根链接:https://www.zhihu.com/question/19627420/answer/45962351来源:知乎 看视频:斯坦福大学公开课:iOS 7应用开发斯坦福大学公开课:iOS 8开发 看书OC <Objective-C编程:Big Nerd Ranch入门经典>([美]Aaron Hillegass)[摘要 书评 试读] iOS <iOS编程(第4版)>([美]Christian

IOS学习入门准备-C—_3

不知道上篇的例子有没有朋友去试过,试过的朋友应该很疑惑,为什么会报错? 我们来编译几个文件看看头文件到底是如何导入的: a.c void hellow(){ printf("hellow"); } a.h #include "b.h"; void hellow(); b.c void word(){ printf("word"); } b.h void word(); test.c #inculde <stdio.h> #inculd

Xamarin.iOS学习一:Hello.iOS 入门学习

介绍使用Xamarin开发iOS 在这两个章节里面,我们会使用Xamarin Studio 或者Visual Studio 创建第一个Xamarin.iOS程序并且去理解使用Xamarin开发iOS程序的基础概念.接着我们将会介绍创建和部署iOS程序所需要的工具.概念和步骤. Hello.iOS 快速入门 首先我们将创建一个让用户输入字母和数字并且可以拨打号码的应用程序,最终效果图如下:

iOS 学习资料整理

视频教程(英文) 视频 简介 Developing iOS 7 Apps for iPhone and iPad 斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS SDK 的使用, 属于 iOS 基础视频 iPad and iPhone Application Development 该课程的讲师 Paul Hegarty 是斯坦福大学软件工程学教授, 视频内容讲解得深入, 权威, 深受好评 Advanced iPhone Development - Fall

【资源】IOS学习资料 - 逆天整理 - 精华无密版【最新】【精华】

 入门看视频,提高看书籍,飘升做项目.老练研开源,高手读外文,大牛讲低调~  01.IOS基础 01.iOS开发快速入门教程 http://pan.baidu.com/s/1kT3ScOf 链接: http://pan.baidu.com/s/1kTKheAF 密码: yycm 02.苹果开发零基础入门教程 http://pan.baidu.com/s/1dDfHL77 链接: http://pan.baidu.com/s/1o6iNkIu 密码: nn3a 03.黑马IOS2期基础 http:

2015最新iOS学习线路图

iOS是由苹果公司开发的移动操作系统,以xcode为主要开发工具,具有简单易用的界面.令人惊叹的功能,以及超强的稳定性,已经成为iPhone.iPad 和iPod touch 的强大基础:iOS 内置的众多技术和功能让 Apple设备始终保持着遥遥领先的地位. iOS学习路线:http://www.mobiletrain.org/page/ios.html 课程分  类 课程模块 模块介绍 课程内容 Part1C语言 C语言和Objective-C语言 C语言 Mac系统及常用工具.进制:C数据

iOS 学习资料

(适合初学者) 本文资料来源于GitHub 一.视频教程(英文) Developing iOS 7 Apps for iPhone and iPad斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS SDK 的使用, 属于 iOS 基础视频 iPad and iPhone Application Development该课程的讲师 Paul Hegarty 是斯坦福大学软件工程学教授, 视频内容讲解得深入, 权威, 深受好评 Advanced iPhone Dev

iOS学习资源收集

https://github.com/Tim9Liu9/TimLiu-iOS 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.com/search 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 侧滑与右滑返回手势 gif动画 其他动画 网络相关 网络连接 图像获取 网络