2. C 语言程序的最小结构

本小结我们来介绍 C 语言的最小程序结构。

C 语言的程序是从一个名为 main 的函数开始运行的。这个函数也通常被称为应用程序的入口函数。

C 语言的入口函数是操作系统启动这个程序的起点。这个函数在经过编译器编译时会放在二进制代码的特殊位置,方便操作系统找到并执行这个程序。

C11 的标准规定了两种 main 函数的写法:

写法1

int main(void) {

    return 0;
}

写法2

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

    return 0;
}

上述两种 C 语言的写法的不同之处:

详细说明:

  1. main 是主函数的名字,也是程序的入口(相当于家里的入户门,要进来必须走这里),并且全局只能有一个main函数。
  2. main 函数左侧的 int 代表返回的类型是整数(int),main 函数要求必须有一个整数(int)的返回值,在 MacOS 和 Linux 下,这个值必须是 0~255 范围内的数,如果超出这个范围,则会留取 低 8位的数值。在Windows 下基本不会用到这个值。这个值代表当前程序是否执行成功,通常 0 代表成功,非零值代表不同类型的错误。 如:return 0; 就是程序执行完返回 0。这个返回值会被 UNIX/Linux Shell中的 $? 特殊变量绑定。
  3. main 后面的 (void)(int argc, char *argv[])时调用参数列表,这个参数用来接收命令行传入的参数和选项,并使用 argc 变量来记录选项和参数的个数,使用 argv[] 指针数组来记录选项和参数的内容(这些内容会在后续进行详细讲解,此时不明白也没关系)。
  4. 一对大括号({})是 main 函数的函数体部分。起初执行的语句要放在其中。

上述两种写法是 C 语言的最小程序结构,任选其一即可。如果要完成更过的功能我们需要向这个框架中加入更多的代码。

上节课我们编写了 hello.c 这个程序内容如下:

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("Hello World!\n");
    return 0;
}

其实我们也可以改写如下:

#include <stdio.h>

int main(void) {
    printf("Hello World!\n");
    return 0;
}

运行结果没有变化。

hello.c 详解:

上述程序中 printf() 是函数调用,括号中的 "Hello World!\n" 是字符串(用来表达人类文字的内容)。字符串相当于一段人类的文字,字符都是以英文的双引号 (") 开始和结束。字符串中的 \n 表示打印一个换行符。

printf() 函数后面的英文分号(;)是语句的结束符号。

此时你看到的 Hello World! 就是由 printf() 函数打印的标准输出。

在使用 printf 这个函数在终端打印文字前,必须先告诉 C 语言的编译器 printf 是一个怎样的函数,这个叫做函数声明。而这个声明在文件 stdio.h 中。我们需要在 hello.c 这个文件在使用 printf() 函数前面包含这个头文件。

第一行的 #include <stdio.h> 是预处理一条预处理指令,意思是将 stdio.h 文件中的内容插入到当前 hello.c 文件中。

stdio 这个文件名的含义是标准输入输出(即:Standard Input/Output),因为对于程序来讲,打印属于输出。

stdio.h 这个文件有很多基本输入输出函数的声明,如:printfscanfgetcharputchar等。如果要使用这些函数,则必须包含此头文件。

练习

使用两种 C 语言的 main 函数写法改写 Hello World 程序,并尝试打印多个 Hello World