第一个 C 语言程序 - Hello ShiYanLou
在右边的实验楼环境 WebIDE 中新建一个文档,命名为 1-1.c,输入一下代码:
#include
int main(){
printf("Hello ShiYanLou\n");
return 0;
}
完成代码编写后,保存并在下面的终端输入编译命令:
gcc -o 1-1 1-1.c //编译1-1.c,并取名为1-1
GCC 是由 GNU 开发的编程语言编译器,用来编译 C 语言程序。
gcc -o 1-1 1-1.c
命令调用编译器 GCC 对文件 1-1.c
进行编译,完成了 “预处理-编译-汇编-链接”,生成了可执行文件 1-1
。
之后,点击回车,这时桌面上生成了一个名称为 1-1
的可执行文件,紧接着我们在终端输入:
./1-1 //执行1-1
在 Linux 的终端中,输入可执行文件的文件名称就可以运行该文件,效果等同于桌面的双击快捷方式。
最终的呈现的效果如下图:
你的屏幕上面是不是显示出了 “Hello ShiYanLou”?小伙伴你表现不错,这时你已经编写一个程序并让它运行了,可以的话,想想怎么显示自己设定的字符呢?
C 语言开发环境
在 Linux 下运行 C 程序
市面上常见的 Linux 都是发行版本,典型的 Linux 发行版包含了 Linux 内核、桌面环境和各种常用的必备工具,国内使用较多的是 Ubuntu(乌班图)、CentOS 、Deepin(深度 Linux)。我们实验楼的环境采用的是 Ubuntu 的操作系统。
GCC
Linux 下使用最广泛的 C/C++ 编译器是 gcc,大多数的 Linux 发行版本都默认安装了此编译器,不管是开发人员还是初学者,一般都将 gcc 作为 Linux 下首选的编译工具。本教程毫不犹豫地使用 gcc 来编译 C 程序。编译概念不懂也不要紧,我们马上就会讲述。
程序编写完成后保存文件,打开终端,在当前目录下使用下列命令调用了 gcc 编译器生成可执行文件。
在 Windows 下运行 C 语言程序
Windows 下的 C 编程常常使用 VC 6.0 或者 Dev C++ 5.7.1,VC 6.0 是一个集成开发环境(IDE),简单来讲就是编程、编译、链接和执行集成在了一个软件上面。在我们实验楼暂且不需要你去学习在 Windows 下的 C 语言编程。当然,如果你想要了解如何在 Windows 下编程 C 语言,网上有非常多的其它相关教程可以供你学习参考.
剖析 C 语言
接下来我们将以上节课编写的名称为 shiyanlou 的 C 程序为材料,来讲解 C 程序的创建过程以及 C 语言的程序结构。
创建 C 程序
C 程序的创建过程有四个基本步骤:
编写
编辑的过程就是创建和修改 C 程序的源代码——我们使用右侧环境的编辑器编写的程序便是源代码。其实在 Linux 上,Vim 编辑器也是很常用的文本编辑器,有兴趣的小伙伴也可以在我们蓝桥云课中学习一下 Vim 编辑器的相关课程。
编译
编译器可以将源代码转换成机器语言,在编译过程中,会找出错误并报告。这个阶段的输入是在编辑期间产生的文件,常称为源文件。
编译器能找出程序中很多无效的和无法识别的错误,包括结构错误,例如程序的某个部分永远不会执行。编译器输出的结构叫作对象代码,存放它们的文件叫作对象文件。在 Linux 中这些文件的扩展名通常是 .o,在 Windows 下面这些文件的扩展名通常是 .obj 。如果编译成功就会生成一个文件,它与源文件同名。但扩展名为 .o 或者 .obj。
其实我们在上一节编写第一个 C 语言程序的时候,使用的 gcc -o 1-1 1-1.c 这条命令既包含了编译也包含了链接,所以直接生成了可执行文件 1-1。 在 Linux 下编译是在源代码文件所在目录输入以下命令(假如源代码文件是上节课的 1-1.c):
gcc -c 1-1.c
这时源文件所在的目录将会生成 1-1.o 的文件。
链接
链接器将源代码文件中由编译器产生的各种对象模块组合起来,再从 C 语言提供的程序库中添加必要的代码模块,将它们组合成一个可执行文件。链接器也可以检测和报告错误,例如程序中引用了一个根本不存在的库组件。链接一旦成功,就会生成可执行文件,在 Windows 下面可执行文件的扩展名是 .exe,在 Linux 下面,可执行文件没有扩展名,但它的文件类型是可执行的。
在编译生成 .o 文件的基础上我们将会输入以下命令(以编译生成 shiyanlou.o 为例):
gcc -o 1-1 1-1.o
这时 1-1.o 所在的目录将会生成 1-1 可执行文件。
多数情况下,我们是通过 gcc -o 1-1 1-1.c 一次性完成编译和链接。
执行
执行阶段就是成功完成了前述的三个过程后,运行程序。但是这个阶段可能会出现各种错误,包括输出错误,计算机什么也不做哦,甚至是计算机崩溃。无论如何,都需要我们返回编辑阶段,检查并修改源代码。相信大家都还记得上一节课的执行命令,在文件所在目录执行:
./1-1
创建 C 程序的各个过程:
C 语言的简单结构
预处理指令
shiyanlou.c 的第一行代码如下:
#include
严格地说,它不是可执行程序的一部分,但它很重要,它是 C 语言中的标准输入输出库,程序没有它将不能做任何输入输出。符号 # 表示这是一个预处理指令,告诉编译器在编译源代码之前,要先执行一些操作。编译器在编译过程开始之前的预处理阶段会处理这些指令。预处理指令的类型相当多,大多放于程序源文件的开头。
在这个例子中,编译器要将 stdio.h 文件的内容包含进来,这个文件被称为头文件,因为通常放在程序的开头处。在本例中,头文件定义了 C 标准库中一些函数的信息,本例要用到标准库中的 printf() 函数,所以必须包含 stdio.h 头文件。stdio 是 “standard input & output” 的缩写,包含了编译器理解 printf() 以及其它输入 / 输出函数所需要的信息。C 语言所有头文件的扩展名都是 .h 。在以后的学习过程中大家会看到很多其它的预处理指令。
main()函数
int main(){
printf("Hello ShiYanLou");
return 0;
}
main() 函数是“主函数”。每个 C 程序都由一个或多个函数组成,但每个 C 程序都必须有一个 main() 函数——因为每个程序总是从这个函数开始执行。
程序的几乎全部工作都是由各个函数分别完成的,函数是 C 程序的基本单位,在设计良好的程序中,每个函数都用来实现一个或多个特定的功能。
一个 C 语言程序由一个或者多个函数组成,其中必须包含一个 main() 函数(且只能有一个 main() 函数)。
一个函数包括两个部分:
一是 函数首部 即函数的第一行:
int main()
二是 函数体 即函数首部下面的花括号内的部分:
{
...
}
函数的内容我们会在以后的课程中涉及,这里只是简单的提及。
程序框架
#include
int main(){
XXXX
return 0;
}
我们的课程的所有程序都需要写上这一段,直到学习函数之前,我们的代码都是放在 “xxxx” 的位置,所以以后你每次写程序的时候,可以先把这个框架写上去,再在这个框架中间写代码。
printf() 是 C 编译系统提供的函数库中的输出函数。
printf() 函数中双引号内的字符串 “Hello ShiYanLou” 按照原样输出,每个语句最后都有一个分号,表示语句结束。
课后练习
编写以下程序,输出运行结果:
#include
int main(){
printf("23+56=%d\n", 23+56);
return 0;
}
注:%d 说明后面有一个整数要输出在这个位置上。
输出 I love shiyanlou
介绍
在实验环境中编写一个 C 语言小程序,实现输出 “I love shiyanlou!”。
知识点
目标
提示语
很简单的入门程序,完成后请点击文档下方的 “提交结果” 查看是否通过挑战。
参考答案
#include
int main(){
printf("I love shiyanlou!");
return 0;
}