C_Primer_Plus02.Introducing C
Introducing C
- 要点
赋值符号
=
函数main(),printf()
编写一个简单的C程序
创建整型变量,为其赋值并在屏幕上显示
换行字符
注释,含多个函数的程序,发现程序的错误
关键字
简单的C程序示例
#include <stdio.h>
int main(void){ /*comment*/
int num;
num = 1; // another comment: assignment
printf("I am a simple ");
printf("computer.\n");
printf("My favorite number is %d because it is first.\n", num);
return 0;
}
程序运行时可能会在屏幕上一闪而过,因为程序会在运行结束后自动关闭窗口。
想让其运行完后保持不关闭,可以在return前添加一行代码,让其等待用户按下一个键后才关闭。
getchar();

逐行解释
#include <stdio.h>
预处理器指令,包含另一个文件。告诉编译器把 stdio.h 中的内容包含在当前程序中。
stdio.h: standard input/output, 是 C 编译器软件包的标准部分,提供键盘输入和屏幕输出的支持。
该行的作用是将 stdio.h 文件中所有内容都输入该行所在的位置。是一种“拷贝-黏贴” 的操作。
#include 这行代码是一条C预处理指令(preprocessor directive),通常,C编译器在编译前会对源代码做一些准备工作,即预处理(preprocessing).
所有的C编译器软件包都提供 stdio.h 文件。该文件中包含了供编译器使用的输入输出函数,它的含义是标准输入/输出头文件。通常C程序顶部的信息集合被称为头文件(header)。
大多数情况下,头文件包含了编译器创建最终可执行程序要用的信息。例如,头文件中可以定义一些常量,或者指明函数名以及如何使用它们。但是,函数的实际代码在一个预编译代码的库文件中。头文件帮助编译器把你的程序正确地组合在一起。
为何不内置输入输出:
并非所有程序都会用到 I/O 包。轻装上阵是C语言的哲学,这使得C语言成为流行的嵌入式编程语言。
#include中的 # 表示C预处理器在编译器接手之前处理这条指令。
int main(void)
默认的程序入口。void 表示函数不带任何参数。改函数的返回值是返回给操作系统,第6章会详细介绍。
int main(void) 是标准写法,虽然有些编译器支持其他写法,但可能在移植时会出现问题。
int和void是 ANSI C 标准的 main 函数定义
变量名
- 先定义后赋值和使用
- 旧标准要求变量声明在块的顶部,其他语句不能再任何声明的前面
- 新标准(C99,C11)遵循C++惯例,可以把声明放在块中的任何位置
- 为了与旧系统更好地兼容,最好是把所有声明都放在块的顶部
- 声明变量会把标识符与内存中的特定位置联系起来,同时也确定了存储在某位置的信息类型或数据类型,赋值时会将值存储在该位置
- C99 和 C11 允许使用更长的标识符号,但编译器只识别前63个字符。对于外部标识符,只允许使用31个字符
- 如果有两个字符名都是64长度,而只有最后一个字符不同,那么编译器认为这两个字符名是同一个
- 变量可以使用大小写字母,数字,下划线,但首字符必须是字符或下划线,不能是数字
- 操作系统和C库经常使用以一个或两个下划线字符开始的标识符,所以尽量避免在自己程序中使用这种名称,虽然没有语法错误,但是可能会导致名称冲突
- C语言区分大小写
- 为使C更加国际化,C99和C11根据通用字符名(UCN)机制添加了扩展字符集,其中包含了除英文字母以外的部分字符
为何需要声明变量
一些更古老的语言(Fortran,Basic等)都允许直接使用变量,不必事先声明,而C不采用这种方法,原因如下:
- 把所有变量放在一起,方便读者查找和理解程序的用途。变量名要有意义,若变量名无法表述清楚,需要加注释,提高可读性
- 声明变量会促使你在编写程序之前做一些计划:程序开始时要准备哪些信息、程序输出是什么、数据的表示方式是什么
- 声明变量有助于发现隐藏在程序中的小错误
C99允许在需要时才声明变量,这样做的好处是:在给变量赋值之前声明变量,就不会忘记给变量赋值。但实际上目前仍有许多编译器还不支持C99。
printf() 函数
在屏幕上打印一串字符。光标会停留最后一个字符之后,同一行。
printf() 是标准的 C库函数。
实参:传递给函数的值
形参:函数中用于存储该值的变量
函数执行完后,控制权被返回至主调函数
return 0;
main 函数的返回值类型为 int,因此需要返回一个整数。main 函数中的 return 语句可以省略,那么程序运行至 main 函数的右花括号'}'时会返回0.但是最好要养成 main 函数中保留 return 语句的好习惯。
提高程序可读性的技巧
- 选择有意义的函数名
- 写注释
- 函数中用空行分割概念上的多个部分
- 每条语句各占一行
多个函数
//* two_func.c -- multi functions /
#include <stdio.h>
void butler(void); /*ANSI/ISO C function prototype*/
int main(void){
printf("Hello butler.\n");
butler();
print("GoodBye.\n");
}
void butler(void){ /*define function*/
printf("Hello, I am butler.\n");
}
butler 函数第一次出现是函数原型(C90标准新增)。函数原型是一种声明形式,告知编译器程序要使用该函数,因此函数原型也被称为函数声明(function declaration)。函数原型还指明了函数的属性(输入输出值的属性),void表示没有输入/输出。
早期的C代码中的函数声明不需要指定参数类型。C90,C99和C11标准都承认旧版本,但也表明了会逐渐淘汰这种过时的写法。如果在编译时出现错误,需要把旧声明转换成函数原型。
何时执行函数是由 main 函数决定的,因此函数的位置不重要,可以在 main 之前,也可以在后面。但惯例是把 main 函数放在开头,其他函数放在后面。
C标准建议,要为程序中用到的所有函数提供函数原型。
关键字和保留标识符
粗体表示 C90 标准新增关键字,斜体表示 C99 标准新增关键字,粗斜体表示 C11 标准新增关键字:


这些关键字和保留标识符可能是有效的名称,不会引起语法错误,但也不要随便使用,否则可能会导致一些问题。保留标识符包括那些以下划线字符开头的标识符和标准库函数名。

浙公网安备 33010602011771号