C学习-第一个C语言(一)

学习C语言语法的目的:就是可以利用C语言编写程序,而后运行程序跟硬件(计算机、手机等硬件设备)进行交互。因为咱们的最终目的是学习iOS开发,学习iOS开发的话必须在Mac系统下,所以我就在Mac系统环境下开发C语言程序,而不是在Windows环境下。编程

1、编写第一个C语言程序-Hello World

1.用什么工具写代码

首先咱们要作的确定是写代码,在代码里面说清楚想要计算机作出怎样的操做。其实写代码就像平时写文章同样,只是在电脑上写一些文本内容,那用什么工具来写代码么?平时咱们在Windows中写文章,能够用记事本、Word等文本编辑工具。在Mac中呢,咱们能够安装一些文本编辑工具来写代码,好比Sublime,Xcode,这里咱们先用Sublime来写一个简单的程序,进行编译,连接,执行,进行一个完整运行流程的演示,或者之后用 Xcode 进行快捷开发学习。小程序

clipboard.png

2.写代码

1> C程序由函数构成app

写代码以前,你首先要知道:任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每一个程序段都有本身的功能,咱们通常称这些程序段为“函数”。因此,你能够说C语言程序是由函数构成的。编程语言

好比你用C语言编写了一个MP3播放器程序,那么它的程序结构以下图所示:模块化

clipboard.png

从上图能够看出:函数就是用来实现某个功能的程序段,每个函数都有本身的功能。所以,你应该把实现某个功能所需的代码都写在函数中。好比,有个函数的功能是播放MP3,那么播放MP3的代码都应该写到这个函数中。
当调用(执行)一个函数时,计算机就会按顺序执行函数中的全部代码,从而展现函数所实现的功能。
通常来讲,咱们会将不一样的功能交给不一样的函数去实现。好比,将暂停播放MP3的代码写到一个函数中,将中止播放MP3的代码写到另外一个函数中。所以,一个C程序中可能会有不少的函数。函数

2> C程序的入口工具

前面说到:一个C程序中可能会有不少的函数,这样就会有个疑问:当咱们运行整个程序时,在众多函数中,计算机会先执行哪一个函数呢?也就是说,一个C程序的入口在哪里?我写了几千行的代码,应该先从哪一行代码开始执行啊?是从第一行代码仍是从最后一行代码开始执行啊?学习

其实,C程序的入口是一个名字叫作main的函数,简称main函数。(为了区分函数,每个函数都有一个名称)也就是说,无论整个程序中有多少个函数,都是先执行main函数。无论main函数写在文件中间,仍是文件末尾,也都是先执行main函数。spa

须要注意的是:命令行

若是一个C程序中没有main函数,那么这个程序就不具有运行的能力。连程序的入口都没有,还运行什么?
一个C程序中只能有一个main函数。想象一下也知道,若是有多个main函数,究竟先执行哪个main函数呢?这会让计算机没法选择

3> 编写main函数

如今已经知道,要想运行一个C程序,必须有一个main函数,接下来就在文本编辑工具中编写一个main函数。main函数的格式大体以下:

int main()
{
   return 0;
}

第1行的int暂时不用去理解,先认为是main函数的固定写法
第1行的main是函数名称,main后面的一对小括号()是函数的标志,绝对不能缺乏!并且这对小括号是“英文括号()”,不是“中文括号()”!
第2行开始,有一对大括号{},函数内部的代码都要写到这对大括号里面。每个函数都有一对{},{}里面的内容能够称为“函数体”。
在第3行添加了一行return 0;,暂时不用理解它的意思,先认为是main函数的固定写法。
像第3行这种写在函数中的代码能够称为一条“语句”。写完一条语句后,要在尾部加上一个分号“;”,表明语句结束了

4> 编写输出语句

接下来在main函数中添加代码。

#include <stdio.h>

int main()  
{  
    printf("Hello World\n");
    return 0;
}
  • 在第5行添加了一条语句printf("Hello Worldn");,这条语句的做用是让计算机在屏幕上输出用双引号""括住的内容:Hello World,后面的"n"是一个转义字符,表示回车换行,所以,输出Hello Wrold这一串内容后会自动换行。至于为何这条语句要这样写?为何这条语句能让计算机输出东西?这些疑问都先搁着,之后会详细解释。

  • 为了保证第5行代码的正常使用,就在main函数的前面加了一行代码#include <stdio.h>,暂时不用去深入了解它的意思,默默加上便可,注意,这里是不用加上分号";"的

  • 当运行这个程序,就会先执行main函数,接着就会按顺序执行main函数大括号{}中的全部语句(第5行、第6行语句)

  • 须要注意的是:main函数中全部语句都必须写在第6行return 0;语句的前面,先别问为何,之后会详细介绍

3.保存为C程序的源文件

代码写完了,总得保存起来吧,保存为何格式的文件呢?每一个文件都有本身的拓展名,不一样的拓展名就表明着不一样类型的文件,好比.mp3表明着音频文件,.txt表明着文本文件。咱们前面编写的C语言代码,应该保存为一个拓展名为.c的文件,这个.c文件称为C语言程序的“源代码文件”,也称为“源文件”。

按下快捷键 command + s,输入文件名(我这里叫作one.c),选择文件格式为c便可。

好吧,目前为止,咱们的第一个C程序就算写完了。

2、编译程序

前面已经把程序写好了,火烧眉毛想作的事情确定是运行程序,看看计算机会有什么反应。遗憾的是,前面编写好的 one.c 文件还不可以运行。计算机只能识别0和1组成的机器指令,你如今写的这些什么int、main这些英文,它是看不懂的。咱们须要使用C语言编译器,将源文件翻译成只有0和1的二进制文件,这个翻译过程,咱们称之为“编译”。

Mac系统上支持一款叫作gcc的编译器,gcc支持多种编程语言:C语言、C++、Objective-C、Java等。在后来,苹果公司本身开发了一款叫作clang的编译器,目标就是要超越gcc。咱们这里就采用clang编译器来编译程序。要想在Mac中使用clang编译器,首先要安装一个命令行工具(Command Line Tools)

1.下载安装命令行工具

安装命令行工具的方式有2种。

1> 方式一:直接到苹果官网下载

先点击屏幕左上角的“苹果图标”,查看你的Mac系统版本

clipboard.png

个人版本是 10.11.6,因此,我选择下载10.11版本的
Command_Line_Tools_macOS_10.11_for_Xcode_8.2.dmg

2> 方式二:先到苹果官网下载安装Xcode,而后打开Xcode,咱们能够看到Xcode8.1版本已经自带了编译器工具,因此,不须要咱们再次安装了。

2.打开终端

安装完命令行工具后,就可使用clang编译器了。那怎么使用clang呢?经过在“终端”中输入相应的clang指令来启动编译器。
先进入咱们的项目目录one.c路径:

➜  ~ cd /Volumes/MacSysterm/workspace/C/demo

4.输入编译指令,编译one.c文件

输入指令:cc -c one.c , 而后敲回车

指令 cc -c 表示编译某个源文件,后面跟上源文件的名称或者全路径。

clipboard.png

若是敲完编译指令后,没有显示太多的信息,说明你编译成功了。编译成功后,会在终端所在的路径下生成一个二进制文件,称为“目标文件”,拓展名为".o",文件名与源文件一致。one.c文件编译成功后就生成了one.o文件。

补充:在开发过程当中,不可能将全部的代码都写在一个.c文件中,为了模块化开发,通常会将不一样的功能写到不一样的源文件中。若是要同时编译多个源文件,这样写:cc -c one.c two.c three.c。源文件编译以后,每一个源文件都会生成对应的.o文件,好比two.c生成了two.o、three.c生成了three.o

5.编译器的语法检测

编译器除了能将.c源文件编译成.o目标文件以外,还有一个很是重要的功能:语法检测。跟英语同样,C语言也有本身的语法,若是你不按照C语言语法去写代码,那就没法编译成功。生成目标文件以前,编译器会先检查.c文件是否有语法错误,若是出现语法错误,会列出错误的总个数、错误缘由和错误代码的行号,这时候就不会产生目标文件;必须修正相应的语法错误,从新编译成功后,才会生成目标文件。

接下来我把代码故意写错,第3行把int写成了intt,第5行语句少了一个分号";"

3、连接程序

1.什么是连接

源文件编译成功后,会生成一个.o目标文件,这就是一个二进制文件,可是,仍是不能运行。目标文件不能运行的主要缘由有2个:

1> 在开发过程当中,不可能将全部的代码都写在一个.c文件中,为了模块化开发,通常会将不一样的功能写到不一样的源文件中。源文件编译以后,每一个源文件都有对应的.o文件,好比two.c生成了two.o、three.c生成了three.o,这些.o文件都不能单独运行,它们之间都有密不可分的关系,须要将全部相关联的.o目标文件组合在一块儿。

2> 除开组合全部的目标文件以后,还须要将C语言的函数库包含进来,才能生成可执行文件。

将全部相关联的.o目标文件、以及C语言函数库组合在一块儿生成可执行文件的过程,咱们称为“连接”。

2.连接目标文件

在终端中输入指令:cc one.o , 而后敲回车。若是要同时连接多个目标文件,这样写:cc one.o two.o three.o

连接成功后,会生成一个可执行文件,默认的名称叫作“a.out”。因为咱们是在mac系统下生成了可执行文件,mac系统是基于UNIX系统的,因此这个文件只能在UNIX系统中运行。若是是在Windows环境下,生成的可执行文件拓展名为".exe"。

3.更改可执行文件的名称

若是想更改可执行文件的名称,能够输入指令:cc -o one one.o,-o后面跟上可执行文件的名称,所以可执行文件的名称就变成了one

4.连续执行编译、连接

其实也能够在终端中直接输入:cc one.c , 会按顺序执行编译、连接两个操做。

这条命令产生一个名为"a.out"的可执行程序。中间会产生一个名为one.o的目标文件,但它在连接完成后会被删除。

若是想修改可执行文件的名称,跟前面是同样的,指令为:cc -o abc one.c , 可执行文件的名称为abc

4、运行程序

通过前面几个步骤后,终于生成了可执行文件,接下来就能够运行这个程序了。运行程序有2种方式:

1.在终端中输入指令运行程序

在终端中输入:./a.out,敲回车就能够运行这个程序。这里a.out是可执行文件的名称。

敲完指令后,你会发现屏幕上输出了一句“Hello World”。就这样,咱们成功跟计算机来了一点小小的互动,它替咱们输出了一句文字。

2.双击可执行文件

直接双击a.out文件,选择用终端来运行程序

5、总结

通过一番折腾,终于将第一个C程序运行成功了,总共有4个步骤:编写程序 -> 编译 -> 连接 -> 运行

clipboard.png

须要注意的是:

  • 中间某个环节出错了,那么就不会有后面的操做。好比编译出错了,那么就不可能有连接这个环节。

  • 若是你对源代码进行了修改,那么须要从新编译、连接以后再运行程序,这样才能看到最新的效果。

6、使用Xcode开发C语言步骤

1.选择建立C项目

clipboard.png

选择 Create A new Project

选择项目名称,而后选择 C 语言

clipboard.png

2.选择Command Line Tool

选择 MacOS -》 Command Line Tool

clipboard.png

3.编写程序

clipboard.png

而后直接运行 run 便可编译C程序

7、指令汇总

这些指令不用去死记,大体有个了解,用到时再来查资料便可

1.编译单个c源文件,并产生一个目标文件

cc -c one.c

这条命令产生一个名为one.o的目标文件

2.编译多个c源文件,并为每一个文件产生一个目标文件

cc -c one.c two.c three.c

这条命令产生3个目标文件:one.o、two.o、three.o

3.连接单个目标文件

cc one.o

这条命令产生一个名为a.out的可执行文件

4.连接多个目标文件

cc one.o two.o three.o

这条命令产生一个名为a.out的可执行文件

5.编译并连接一个c源文件

cc one.c

这条命令产生一个名为a.out的可执行文件。中间会产生一个名为one.o的目标文件,但它在连接过程完成后会被删除。

6.编译并连接多个c源文件

cc one.c two.c three.c

这条命令产生一个名为a.out的可执行文件。当编译的源文件超过一个时,目标文件便不会被删除。这就容许你对程序进行修改后,只对那些进行过改动的源文件进行从新编译。

7.编译一个c源文件,并把它和现存的目标文件连接在一块儿

cc one.o two.o three.c

这条命令产生一个名为a.out的可执行文件

8.上面那些能够产生可执行文件的指令都可以加上“-o name”这个选项,产生的可执行文件就叫作name

好比 cc -o abc one.c
这条指令会产生一个名为abc的可执行文件

9.执行可执行文件

./a.out

这条指令能够执行一个名为a.out的可执行文件

相关文章
相关标签/搜索