C语言探索之旅 | 第一部分第三课:你的第一个程序

摘要:
原文:https://www.jianshu.com/p/c73fecacd006C语言探索之旅全系列简介前言控制台程序是Windows程序最基本的代码特殊字符注释,这对总结第一部分第4课预览1非常有用。前言在上一课C语言探索旅程|第一部分第2课:要做好这一工作,必须先使用它的工具。我们说过,您可以使用您最喜欢的IDE,或者使用文本编辑器、编译器和调试器的组合来学习本课程。那么,如何创建一个C语言的基本控制台应用程序?我们将一起编写第一个C语言程序。

C语言探索之旅 | 第一部分第三课:你的第一个程序第1张

作者 谢恩铭,公众号「程序员联盟」。
转载请注明出处。
原文:https://www.jianshu.com/p/c73fecacd006

《C语言探索之旅》全系列

内容简介


  1. 前言
  2. 控制台程序还是窗口程序
  3. 最基础的代码
  4. 特殊字符
  5. 注释,很有用
  6. 总结
  7. 第一部分第四课预告

1. 前言


在上一课 C语言探索之旅 | 第一部分第二课:工欲善其事,必先利其器 中我们说过,你可以用自己喜欢的 IDE,或者用文本编辑器、编译器和调试器这样的组合来学习本课程。

不过,我觉得对于初学者,还是有必要演示一下某款 IDE 的具体下载和安装等操作。我就以 Code::Blocks 这款免费开源且跨平台的 IDE 为例吧。

下载 Code::Blocks


先去 Code::Blocks 的官方下载页面:http://www.codeblocks.org/downloads/binaries

2020 年 3 月 29 日 Code::Blocks 终于更新了 20.03 版(不容易啊,上一次的版本还是 2017 年的),不过可惜的是 macOS 的版本还是停留在 13.12(网站上标识的是 13.12,但实际安装之后是 17.12 版)。

  • Windows 用户请下载 .exe 的文件,一般来说是下载 codeblocks-20.03mingw-setup.exe 这样的最新的 .exe 的安装文件。记得要有 mingw 字样的,才包含 GCC 编译器和 GDB 调试器。

  • Linux 用户请下载对应你的操作系统的版本。目前有 Debian、Ubuntu 和 RedHat 系。Ubuntu 可以用 apt 命令来安装,请看官方文档。

  • 苹果 macOS 用户请下载最新版的 dmg 文件,例如 CodeBlocks-13.12-mac.zip。不过这个版本有点旧了,可能会有 bug。

安装运行 Code::Blocks


Code::Blocks 的安装很简单,和安装 QQ 这样的普通软件没多大区别,一路默认到底就好。

安装完之后双击运行,你可以看到类似下图的界面:

C语言探索之旅 | 第一部分第三课:你的第一个程序第2张

上图中标注了四个区域:

  1. 工具栏:有很多按钮,但只有几个是我们时常用到的。
  2. 项目文件列表区:左边的栏里面显示了你的项目的所有文件。
  3. 主界面:写代码的地方。
  4. 通知栏:会看到运行的错误,编译的问题,等等。

那么,如何创建一个 C语言基本的控制台应用程序呢?

首先到菜单里,依次点击“File -> New -> Project”,

C语言探索之旅 | 第一部分第三课:你的第一个程序第3张

会打开类似如下的窗口:

创建新项目

可以看到,Code::Blocks 支持非常多的程序类型,这些程序类型用到不同的库,比如 SDL(开发 2D 程序),OpenGL(开发 3D 程序),Qt 和 wxWidgets,等等。甚至还支持 Arduino、ARM 这样的嵌入式项目。

目前,这些图标很多都只是好看而已,因为你还没安装对应的库,所有不能用。

暂时我们只用最基本的 Console application(表示“控制台应用”,简单来说就是会弹出一个框,里面显示程序运行的结果,你也可以输入东西)。

选择 Console application,点击 Go 按钮到下一步:

C语言探索之旅 | 第一部分第三课:你的第一个程序第5张

这一步是让你选择要使用的编程语言,有 C 和 C++ 两个选项,我们选择 C,表示要创建的是 C语言的项目。然后点击 Next 进入下一步:

项目配置

Project Title 里面填写你要创建的项目名称,我们填的是著名的 HelloWorld。Folder to create project in 是选择项目存放的路径。

Project filename 是指项目文件名称,可以看到是 .cbp 结尾的文件类型,cbp 是 Code Blocks Project 的首字母缩写,表示“Code::Blocks项目”。

点击 Next 到下一步:

进一步配置

这里我们不必更改什么,默认就好。点击 Finish(“完成”)结束配置,Code::Blocks 就会创建你的第一个项目了。

打开 Sources 里的 main.c 这个 C语言的源代码文件。点击上面工具栏里有一个绿色的三角形按钮,是用于运行程序,它会提示你是否要编译,点击 yes(当然了,你也可以点击绿色三角形边上的带齿轮的绿色三角形按钮,是用于“编译再运行”),运行起来后我们的第一个控制台程序输出:

Hello world!

运行结果

2. 控制台程序还是窗口程序


现在,既然我们已经把舞台都搭好了,该是时候把我们的主角 C语言请出来了。我们将一起来写第一个 C语言程序。

当然了, 这个程序会是黑白的,也不会跟你打招呼,更不会帮你泡咖啡。可能显得毫无用处,但却是你的第一个程序,我保证你会有成就感的。

我们在 Code::Blocks 这个 IDE 中看到,当你要创建一个项目时,IDE 会问你是创建 console(控制台)程序还是 window(窗口)程序。

之前我们为了快速演示,选择的是控制台程序。

其实只有这两种类型,没有其他的了:

  • 窗口程序
  • 控制台程序

先来介绍一下窗口程序,因为比较直观,比较漂亮,颜值爆表。

这样的程序你肯定见到过,下图对大多数人来说很熟悉吧。

Windows 系统的画图程序

是的,上图就是 Windows 系统的画图程序。它是一个窗口程序,就是有窗口的程序(有时候不止一个窗口)。我想你肯定想学习创建这样的程序,但是如果你是第一次接触编程,那有点难。

一开始还是最好从 console(控制台)程序入门。

那么,所谓的控制台程序长什么样呢?

最初的程序都是控制台程序,因为那个年代电脑还只能显示黑白色,而且也没有强大到可以运行窗口程序,不像今天的电脑。

当然了,时代在进步。Microsoft(微软)公司的 Windows 系统使得电脑能被广大群众使用,就是因为它操作很简单,几乎所有操作都可以用窗口程序完成。

Windows 实在是太流行了,以至于大多数人都不知道 console(控制台)程序长什么样。不过,我有一个好消息:“控制台程序并没有死!”

实际上,Linux 操作系统给很多的人展示了控制台程序的魅力,下图就是 Linux 下的控制台程序的截图:

Linux 的 Terminal 终端

看上去还不错,是吗?好了,现在你已经对控制台程序有了初步概念了。

有一些注意点:

  1. 今天电脑已经可以显示彩色了,所以上面看到的控制台也不是完全黑白的了。
  2. 对于初学编程的人来说,控制台还是令人不太适应的。
  3. 如果我们掌握了这个工具,可以用它来做很多事情。

就如我们上面提到的,创建像上图中的控制台程序,其实很简单,而且非常适合初学者。现在的控制台程序不仅可以显示彩色,而且如果你要给它设置一个背景图片,也是可以办到的。

说了这些,那是不是只有 Linux 才有控制台程序,Windows 就没有呢?

当然也有,在 Windows 中它被称为 cmd,也就是 command(表示“命令”)的缩写,也称为“命令提示符”,是 Windows 环境下的虚拟 DOS 窗口。只不过它比较隐秘。可以用以下两种把它请出来:

  1. 点击“开始 -> 搜索 -> 输入“cmd”,然后按回车键,或点击“确定”。
  2. 用组合键 win+R 调出 (win 键就是键盘最下面从左边数第二个键,上面有个 Windows 系统标志的),再输入 cmd,然后按回车键,或点击“确定”。

C语言探索之旅 | 第一部分第三课:你的第一个程序第11张

C语言探索之旅 | 第一部分第三课:你的第一个程序第12张

cmd 程序,也就是“命令提示符”

上图就是 Windows 里面奇妙的控制台。

当然了,苹果的 macOS 操作系统中,我们也可以打开控制台的,只要运行 Terminal 这个系统自带的应用程序:

C语言探索之旅 | 第一部分第三课:你的第一个程序第14张

3. 最基础的代码


对于 C语言的每一个程序,我们都要输入最基础的几行代码。这几行代码不是太特别,但是必不可少。

我们现在就来看看“最基础的代码”长什么样。

让 IDE 为我们生成“最基础的代码”


之前我们已经演示了,Code::Blocks 会为我们生成 C语言程序的最基础代码,如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("Hello world!
");
    return 0;
}

最基础的代码

其中

int main()

这一行也可以写成

int main(int argc, char *argv[])

两种写法都是可以的,不过第二种(复杂一些的)更常用,也更专业。以后的课程我们会用 int main(int argc, char *argv[]) 这种形式。

分析最基础的代码


对于第一次接触编程的朋友,可能这个最基础的代码也是令人难以理解。

所以我们才要一起来学习如何阅读代码。

先从前两行开始吧:

#include <stdio.h>
#include <stdlib.h>

这两行很特别,我们会在源代码开头的地方见到这样的以 # 号开头的语句。像这样特别的行,称为预编译指令

这个术语听起来有点复杂。预编译指令会在编译开始的时候,被一种叫做预编译器的程序所读取。

其实编译器为我们做很多事情,我们之后的课程会详细来说明。

但是这两行到底是什么意思呢?

这里的 # 号是预编译指令开始的标志,没有什么特别的含义,后面接着的 include 表示“包含”,所以这两句话的意思就是在我们的程序里包含 stdio.h 和 stdlib.h 这两个文件,这两个文件在系统的库里已经存在了,这些文件被称为库文件

如果没有这两句话,那我们就不能在程序里调用这两个文件定义的东西了。

接着,我们看到了下面的语句:

int main()
{
    printf("Hello world!
");
    return 0;
}

以上我们所看到的语句块,被称为函数。其实 C语言的程序基本就是由函数来构成的。所以目前我们的程序只有一个函数。

我们现在还不会讲很多函数的细节,因为那将是后面的函数那一课的内容,现在还早。但是我们会大体说一下函数的组成。

第一行包含了函数的名字,是第二个单词 main。所以这里的函数称为 main 函数。这是一个特殊的函数,程序执行总是从 main 函数开始。

一个函数有开始和结束,使用大括号 {} 来标识。所以我们的 main 函数包含以下两行代码

printf("Hello world!
");
return 0;

这些在函数里的行也有名字,被称为指令。每一条指令都会让电脑做特定的事情。一个函数大体来说是用来集中一定数目的指令。比如我们可以创建一个函数叫做“打开文件”,这个函数会让电脑为你打开某个文件。

函数的优势就是当你写好了这个函数之后,你只需要使用(专业术语叫做调用)“打开文件”这个函数,电脑就会为你执行函数里面的指令。你不必每次在需要实现“打开文件”功能的地方都重复写那些指令。函数可以大大节约代码空间,提高效率。

printf("Hello world!
"); 

这一行指令使得屏幕显示 "Hello World!"(表示“你好,世界!”)这一句话。当你的程序执行到这一行时,就在屏幕上显示相应的信息。然后会执行下一个指令。

printf 也是一个函数,定义在 stdio 库中,现在你知道

#include <stdio.h>

这句话的重要性了吧,如果没有引入 stdio 这个库,那我们的 main 函数就不能调用 printf 这个函数。

第二个指令 return 0; 大致就是表示函数结束了,并且返回 0 值。

那么,为什么我的函数返回 0,不是返回其他值呢?

实际上,每个 C语言程序结束时都会返回一个值,0 表示一切正常结束,其他的值表示异常。

这里我们只是简单介绍了一下函数的概念。关于函数的细节,请期待之后的课程。

测试你的程序


在 Code::Blocks 里面编译(Build / Compile)并运行(Run) 你的最基础代码。得到如下结果

运行结果

可以看到你的第一个程序在屏幕上显示了 "Hello world!"。

下面的那几行文字是 Code::Blocks 生成的,表示程序顺利执行,并且耗时 0.297 秒。

"Press any key to continue"这句话是让你按键盘上的任意键来退出控制台程序。

4. 特殊字符


特殊字符的作用是用来表示“换行”,“隔开一个制表符的空间”,等等。

特殊字符很好辨认,经常是两个字符的组合,第一个字符是反斜杠(),第二个字符是一个数字或者一个字母。

下面的两个特殊字符是我们经常会用到的:

  • :换行符 (作用类似按回车键)。
  • :制表符 (作用是空出几个空格。空格的数目可以配置)。

5. 注释,很有用


在结束这一课前,我们必须再来讲一下注释。不论什么编程语言,我们都可以在源代码里添加注释。C语言当然也不例外。

注释,到底是什么啊?

简单地说,注释就是在你程序之中用来标注这个程序的作用,某一行代码的作用,等等的文字。注释真的很重要,因为即使是一个计算机天才,也要在某些地方做一些注解。注释有如下作用:

在之后阅读自己写的代码时不至于迷失方向。不可否认,在重新阅读之前写的代码时,我们常常会忘记这个函数是干什么的,那个地方为什么要这样写。特别是代码量很大,几千几万行甚至更多时,如果没有注释,那阅读起来会很费力。

如果你把你的代码给别人阅读,注释往往可以节省对方理解你的代码的时间。

要在 C语言的代码中插入注释,有几种形式:

  • 如果你的注释比较短,在一行里就能写完,那可以用 //... 这样的形式。
  • 如果你的注释跨越好几行,那可以用 /* ... */ 的形式。

虽然程序行数变多了,但是注释却使我们的代码变得易读很多。编译代码的时候,编译器会忽略所有的注释,这些注释不会出现在最终的程序里,只是为程序员服务的。

记住
注释要起到引导阅读代码的作用,以便理清头绪。但是不要在很显然就能懂的地方添加注释。

引用 IBM 公司的一句格言:
“如果一个程序,在你仅仅看完它的注释之后,你不能了解它的作用,那么把这个程序扔了吧。”
-- 大公司就是这么严格,这么任性。

6. 总结


  1. 程序可以通过一个控制台(Console)或者窗口(Window)和用户交互。
  2. 对初学者来说用控制台来编写第一个程序要简单很多,虽然不太吸引人。
  3. C语言的程序主要是由分号结尾的语句构成的。
  4. 多条指令可以写在一个函数里,就好像包装在一个盒子里一样。
  5. main 函数是程序的启动函数,程序运行时会执行 main 函数里的指令。
  6. printf 函数使我们可以在控制台的屏幕上显示信息。
  7. printf 函数是定义在一个库(Library)中的。库中经常包含不止一个函数,可以给我们程序调用。

7. 第一部分第四课预告


今天的课就到这里,一起加油吧!

下一课:C语言探索之旅 | 第一部分第四课:变量的世界(一),内存那档事

下一课开始,我们一起探寻 C语言的变量的奇幻世界,还会聊到内存哦,有些难度。


我是 谢恩铭,公众号「程序员联盟」运营者,慕课网精英讲师 Oscar 老师,终生学习者。
热爱生活,喜欢游泳,略懂烹饪。
人生格言:「向着标杆直跑」

免责声明:文章转载自《C语言探索之旅 | 第一部分第三课:你的第一个程序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C++ fscanf 读取一整行报错:Uncaught ReferenceError: $ is not defined下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Eclipse控制台输出信息的控制(引用其他人的博客)

当你在Eclipse中 running/debugging一个应用程序的时候,有关该应用程序的运行调试信息及日志信息都会输出到控制台(console )显示,但是Eclipse只会显示最后一部分的日志信息,如果你的应用程序会产生大量的运行调试信息及日志信息,你可能会想保持这些信息到文件中,以便查看分析。 有三种方法仅供参考: (1)、我们可以设置Ecli...

如何构建一个入侵检测系统(IDS)

  通常来说,一个企业或机构准备进军此领域时,往往选择从基于网络的IDS入手,因为网上有很多这方面的开放源代码和资料,实现起来比较容易,并且,基于网络的IDS适应能力强。有了简单网络IDS的开发经验,再向基于主机的IDS、分布式IDS、智能IDS等方面迈进的难度就小了很多。在此,笔者将以基于网络的IDS为例,介绍典型的IDS开发思路。   根据CIDF规范...

Linux后台执行脚本 &amp;amp;与nohup

Linux后台执行脚本的方式: 0、脚本代码 [root@VM_1_3_centos apps]# cat test.php <?php sleep(5); echo "hello world! "; 1、& 符号当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上& 实现后台运行。示例1、 [root@VM_1_3_c...

控制台连接oracle11g报ORA-12560异常

oracle11g R2 64bit oracleClient 11.2 32bit PL/SQL Developer11.0.2 32bit 今天发现了一个奇怪的现象,如图: 后来发现机器上既有server的sqlplus,又有client的sqlplus,而client的环境变量在server的前面,优先使用了client的sqlplus。 而cli...

关于c语言内存分配,malloc,free,和段错误,内存泄露

1.   C语言的函数malloc和free  (1) 函数malloc和free在头文件<stdlib.h>中的原型及参数        void * malloc(size_t size) 动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL。        void  free(void *ptr) 释放动态申请...

rocketmq-console 控制台使用详解

三、控制台的使用 1. 切换语言为简体中文 上图首页即为“驾驶舱”标签下的图标,中共有4个图:- Broker TOP 10 :是指前10个Brokder处理消息的数量。比如从上图可以看出来,我只有一个Brokder,并且此Brokder处理了1000条消息.- Broker 5min trend: 此图标可以筛选出某个Topic下5分钟的消息数量,可以...