让我们来看一个简单的 C 程序,并用它来理解 C 语言的基础知识和 C 编译过程。如果您有自己的计算机,并安装了前面所述的 C 编译器,您可以创建一个名为 sample.c 的文本文件,并用它来跟随我们逐步完成这个示例。请注意,如果您在文件名中省略了 .c,或者如果您的编辑器在名称后附加了 .txt,那么在编译时您可能会遇到某种错误。
这是我们的示例程序:
/* 示例程序 */
#include <stdio.h>
int main()
{
printf("这是我第一个程序的输出!\n");
return 0;
}
编译并执行后,该程序指示计算机打印出“这是我第一个程序的输出!”然后停止。没有比这更简单的了!现在让我们来看看每一行都在做什么:
第 1 行——这是在 C 语言中编写注释的一种方式,位于 /* 和 */ 之间,可以跨一行或多行。
第 2 行——`#include` 命令告诉编译器去其他来源查找已有的 C 代码,特别是库,库是包含常见可重用指令的文件。`<stdio.h>` 引用了一个标准 C 库,其中包含用于从用户获取输入和将输出写入屏幕的函数。我们稍后将更详细地探讨库。
第 3 行——这是函数定义的第一行。每个 C 程序至少有一个函数,或者表示程序运行时计算机应该做什么的代码块。函数执行其任务,然后产生一个副产品,称为返回值,可以被其他函数使用。程序至少有一个名为 main 的函数,如这里所示,其返回值为 int 数据类型,表示整数。当我们稍后更深入地研究函数时,您将看到空括号的含义。
第 4 行和第 7 行——函数中的指令用花括号括起来。有些程序员将花括号括起来的块的开始和结束放在单独的行上,如这里所示。其他人会将开花括号 ({) 放在函数定义的第一行的末尾。虽然程序中的代码行不一定非要写在单独的行上,但程序员通常会将每条指令放在单独的行上,并用空格缩进,以便于以后阅读和编辑代码。
第 5 行——这是一个对名为 printf 的函数的函数调用。该函数在第 1 行包含的 stdio.h 库中编码,因此您不必自己编写它。这个对 printf 的调用告诉它要打印什么到屏幕上。\n 在末尾,在引号内,不会被打印;它是一个转义序列,指示 printf 将光标移动到屏幕上的下一行。此外,正如您所看到的,函数中的每一行都必须以分号结尾。
第 6 行——每个返回值的函数都必须包含像这样的 `return` 语句。在 C 语言中,`main` 函数必须始终具有整数返回类型,即使它在程序中未使用。请注意,当您运行 C 程序时,您实际上是在运行其 `main` 函数。因此,在测试程序时,您可以告诉计算机显示运行程序的返回值。返回值为 0 更好,因为程序员在测试中通常会查找该值,以确认程序成功运行。
当您准备测试程序时,保存文件并编译运行程序。如果您在命令行使用 gcc 编译器,并且程序在名为 sample.c 的文件中,您可以使用以下命令编译它:
gcc -o sample.exe sample.c
如果代码中没有错误,运行此命令后,您应该在与 sample.c 相同的目录中找到一个名为 sample.exe 的文件。最常见的错误是语法错误,这意味着您输入错误,例如在一行末尾缺少分号或没有关闭引号或括号。如果需要进行更改,请在文本编辑器中打开文件,修复它,保存更改,然后再次尝试编译命令。
要运行 sample.exe 程序,请输入以下命令。请注意 ./,它强制计算机在当前目录中查找可执行文件:
./sample.exe
以上是 C 语言编码和编译的基础知识,尽管您可以从其他 C 编程资源中学到更多关于编译的知识。现在,让我们打开盒子,看看 C 语言有哪些构建程序的组件。