C 语言源文件简介

本文内容

目录汇总:C 语言零基础入门教程

到现在为止一直假设 C 程序是由单独一个文件组成的。事实上,可以把程序分割成任意数量的源文件。根据惯例,源文件的扩展名为 .c。每个源文件包含程序的部分内容,主要是函数和变量的定义。其中一个源文件必须包含一个名为 main 的函数,此函数作为程序的起始点。

例如,假设打算编写一个简单计算器程序,用来计算按照逆波兰表示法(reverse polish notation, RPN)输入的整数表达式,在逆波兰表示法中运算符都跟在操作数的后边。如果用户输入表达式

1
30 5 – 7 *

我们希望程序可以显示出此表达式的值(此例中位数为 175)。如果使程序逐个读入操作数和运算符,并利用栈(C 语言外部变量简介)记录中间结果,那么计算逆波兰表达式的值是很容易的。如果程序读取的是数,就把此数压入栈。如果程序读取的是运算符,则从栈顶弹出两个数进行相应的运算,然后把结果压入栈。当程序执行到用户输入的末尾时,表达式的值将在栈中。例如,程序将按照下列方式计算表达式 30 5 – 7 * 的值。

(1) 把 30 压入栈。

(2) 把 5 压入栈。

(3) 从栈顶弹出两个数,用 30 减去 5,结果为 25,然后把此结果压回到栈中。

(4) 把 7 压入栈。

(5) 从栈顶弹出两个数,将它们相乘,然后把结果压回到栈中。

完成这些步骤后,栈将包含表达式的值(即 175)。

把这种策略转换为程序并不困难。程序的 main 函数将用循环来执行下列动作。

  • 读取“记号”(数或运算符)。
  • 如果记号是数,那么把它压入栈。
  • 如果记号是运算符,那么从栈顶弹出它的操作数进行运算,然后把结果压入栈中。

当像这样把程序分割成文件时,将相关的函数和变量放入同一文件中是很有意义的。可以把读取记号的函数和任何需要用到记号的函数一起放到某个源文件(比如说 token.c)中。pushpopmake_emptyis_emptyis_full 这些与栈相关的函数可以放到另一个文件 stack.c 中。表示栈的变量也可以放入 stack.c 文件,而 main 函数则可以在另一个文件 calc.c 中。

把程序分成多个源文件有许多显著的优点。

  • 把相关的函数和变量分组放在同一个文件中可以使程序的结构清晰。
  • 可以分别对每一个源文件进行编译。如果程序规模很大而且需要频繁改变(这一点在程序开发过程中是非常普遍的)的话,这种方法可以极大地节约时间。
  • 把函数分组放在不同的源文件中更利于复用。在示例中,把 stack.c 和 token.c 从 main 函数中分离出来使得今后更容易复用栈函数和记号函数。

请参阅

(完)

comments powered by Disqus

本文内容