Skip to content

Latest commit

 

History

History
107 lines (78 loc) · 6.61 KB

README.md

File metadata and controls

107 lines (78 loc) · 6.61 KB

chapter02

C语言概述

#include 指令和头文件

#include <stdio.h> 实际上是一种拷贝-粘贴操作。include文件提供了一种方便的途径共享许多程序共有的信息。
#include 这行代码是一条C预处理器指令preprocessor directive。通常C编译器在编译前会对源代码做一些准备工作,即预处理preprocessing
通常,在C程序顶部的信息集合被称为头文件header。头文件帮助编译器把程序正确地组合在一起。
大多数情况,头文件包含编译器创建最终可执行程序要用到的信息。如常量或指明函数名以及如何使用它们。但是,函数的实际代码在一个预编译代码的库文件中。
ANSI/ISO C规定了C编译器必须提供哪些头文件。特定C实现的文档中应该包含对C库函数的说明。这些说明确定了使用哪些函数需要包含哪些头文件。
省略必要的头文件可能不会影响某一特定程序,但是最好不要这样做。

main()函数

函数是C程序的基本模块
int main(void) C程序一定从 main() 函数开始执行目前不必考虑例外的情况.
空参数时:C99和C11标准不允许写成 int main(),C90标准勉强接受这种形式
空返回值时:void main() 所有标准都未认可这种写法。许多编译器都不能这样写。
坚持使用标准形式,把程序从一个编译器移植到另一个编译器时就不会出什么问题。
return 0; 如果遗漏,程序在运行到最外面的右花括号时会返回0。因此可以省略main()函数末尾的return语句。但是不要在其他有返回值的函数中漏掉它。
Linux 和 UNIX 操作系统 return 语句有实际的用途参考chapter11

注释

/* */ 程序注释
// ... C99 新增单行注释
一些编译器可能不支持这一特性。还有一些编译器需要更改设置,才能支持C99和C11特性

{} 花括号、函数体 和 块

一般而言,所有的C函数都使用花括号标记函数体的开始和结束。这是规定,不能呢个省略。
花括号还可用于把函数中的多条语句合并为一个单元或块。

声明 declaration

int num; 声明是C语言最重要的特性之一,在函数中声明一个名为num类型为int的变量。
编译器使用这些信息为num变量在内存中分配存储空间。分号在C语言中是大部分语句和声明的一部分。
int 是C语言的一个关键字keyword。num是一个标识符identifier,是一个变量、函数或其他实体的名称。
声明把特定标识符与计算机内存中的特定位置联系起来,同时也确定了储存在某位置的信息类型或数据类型。
C语言中,所有变量都必须先声明才能使用。意味着必须列出程序中用到的所有变量名及类型。
以前C语言还要求把变量声明在块的顶部,其他语句不能在任何声明的前面。
C99和C11遵循C++的惯例,可以把声明放在块中的任何位置。 \

标识符长度

C99和C11允许使用更长的标识符名,但是编译器只识别前63个字符。对于外部标识符参考chapter12,只允许使用31个字符。
C90只允许6个字符,旧式编译器通常最多只允许使用8个字符。
可以使用更长的字符,但是编译器会忽略超出的字符。如果两个标识符名有都有63个字符,只有一个字符不同,那么编译器会识别这是两个不同的名称。
如果两个标识符都是64个字符,只有最后一个字符不同,那么编译器可能将其视为同一个名称,也可能不会。标准未定义在这种情况下会发生什么。

命名规则

允许小写字母、大写字母、数字、下划线。名称的第一个字符必须是字符或下划线,不能是数字。
操作系统和C库经常使用以一个或两个下划线字符开始的标识符,因此最好避免在自己的程序中使用这种名称。
标准标签都以一个或两个下划线字符开始,如库标识符。这样的标识符都是保留的。意味着,虽然使用他们没有语法错误,但是会导致名称冲突。
C语言大小写敏感。
C99和C11根据通用字符名UCN机制添加了扩展字符集,让C语言更加国际化。

声明变量的理由

一些更老的语言 FORTRAN和BASIC的最初形式,都允许直接使用变量,不必先声明。
声明变量,方便读者查找和理解程序的用途。
促使编写程序之前做一些计划。
发现隐藏在程序中的小错误。
许多编译器都还不支持C99。

赋值

num = 1;赋值是C语言的基本操作之一。在执行声明语句是int num;时,编译器会在计算机内存中为变量num预留空间,然后在执行赋值表达式语句时,把值储存在之前预留的位置。
可以给num赋不同的值,所以num被称为变量variable

语法错误

不遵循C语言规则就会犯语法错误。参考

语义错误

遵循C语言规则,但是结果不正确,就是犯了语义错误。参考
自己模拟计算机逐步执行程序定位语义错误
在程序中的关键点插入额外的 printf()语句,监视指定变量值的变化。通过变化了解程序的执行情况。对执行满意后,删除额外的printf()语句,然后重新编译。
调试器debugger是一种程序,一步一步运行另一个程序,并检查该程序变量的值。参考

程序状态

程序状态program state是在程序的执行过程中,某给定点上所有变量值的集合。是计算机当前状态的一个快照snapshot

关键字keyword和保留标识符reserved identifier

关键字是C语言的词汇,不能用他们作为标识符。
粗体表示C90标准新增的关键字,斜体表示的C99标准新增的关键字,粗斜体表示的是C11标准新增的关键字

auto extern short while
break float signed _Alignas
case for sizeof _Alignof
char goto static _Atomic
const if struct _Bool
continue inline switch _Complex
defaut int typedef _Generic
do long union _Imaginary
double register unsigned _Noreturn
else restrict void _Static_assert
enum return volatile _Thread_local

return|top