195 lines
5.3 KiB
Markdown
Raw Normal View History

2018-03-16 23:51:20 +08:00
2.1 C基础语法
===
# 2.1.1 关键字
以下单词或字符在C语言中有特殊含义称作关键字
* include
* define
* ifdef
* ifndef
* endif
* extern
* typedef
* static
* const
* struct
* union
* void
* signed
* unsigned
* char
* short
* int
* long
* float
* double
* if
* else
* for
* do
* while
* break
* continue
* goto
以上关键字的作用将在后续章节讲解。
# 2.1.2 特殊符号
C语言中常会用到以下符号
* 赋值运算:=、+=、-=、*=、/=、%=、&=、|=
* 算数运算:+、-、*、/、%、++、--
* 比较运算符:==、>=、<=、!=、>、<
* 逻辑运算:&&、||、!
* 位运算:&、|、~、^、>>、<<
* 指针运算:*、&
* 其他:;、#、{、}、[、]、0x、0b、//、/\*、\*/
以上符号中的运算符将在学习数据类型之后进行说明。
2018-03-17 00:28:57 +08:00
# 2.1.3 注释
注释是一些说明性的文字,他并不影响程序的逻辑、执行和运算。仅仅是帮助编程开发人员更好阅读和理解代码。
C语言有行注释和块注释下面是几个行注释
```cpp
// 这是一个行注释。
// This is a line comment.
```
下面是一个块注释:
```cpp
/*
* @author: lion chen cy187lion@sina.com
* @brief: 这是一个Doxygen风格的块注释。
*/
```
C语言的编码和注释有很多种风格你会发现每种风格有各自的优缺点。你可以尝试多种风格但成熟的软件系统会采用统一的风格这样的要求经常由《编码规范》来约定。
# 2.1.4 字面常量
2018-03-16 23:51:20 +08:00
常量可以理解为固定不变的量,是与变量相对的概念。常量一经申明变不允许再发生改变。以下均是常量:
* 16、0xFA90、0b1010
* 25.1
* "Have Fun!"、'x'、"15996699996"、"2\*3.1415926535898\*r"
常量的不变性是指如下赋值语句都是错误的:
* "var"="Have Fun!"
* "var"=1024
* 16=0x16
而下列写法是可以编译通过的:
* "var"=="Have Fun!"
* "var"!=1024
* 16<0x16
因为以上并非赋值语句而是比较语句。通过英文双引号表达的是字符串变量他们可以是一串字符。使用英文单引号表达的是字符常量他只可以包含一个字符。而类似于16、25.1这种的是数字量。数字量分为整数和浮点数,他们有多种方式去表达方式。
2018-03-17 00:28:57 +08:00
# 2.1.5 整数的表达方式
2018-03-16 23:51:20 +08:00
除了常用的十进制方式以外在C语言甚至其他语言中还经常用到二进制和十六进制数。
* 0b 开头的表达二进制数仅使用0、1表达
* 0x 开头的表达十六进制数除0~9外使用A~F来表达10~15
二进制、十进制、十六进制间通过 8421BCD 码进行转换。
* 二进制0b 1010
* 十进制1\*2^3+0\*2^2+1\*2^1+0\*2^0
* 也就是1\*8+0\*4+1\*2+0\*1
且每 4 位二进制数可表示一位十六进制数:
* 二进制0b 1010 0101
* 十六进制0xA5
2018-03-17 00:28:57 +08:00
# 2.1.6 变量
2018-03-16 23:51:20 +08:00
在C语言中可以使用字符来表示数字量或字符串等。就好像数学里用x表示一些数那样。这样的量可以被反复修改被称作变量。变量只可以使用英文字符或下划线“_”开头可包含0~9的数字不可包含其他字符。以下是一些变量
* int aint
* unsigned long _along
* double flt0, flt1, flt2
* void* pointer
变量需要被定义才能够使用在定义变量的时候在变量前面的用于描述变量的C关键字表示了变量的类型和作用范围。
例如 static 表示变量是静态的,而 short 表示了有符号的32位整数。
所谓有符号、无符号,即变量所表示的数是否包含负数。
* unsigned char: 0~255
* signed char-128~127
* char = signed char
char是8位数可表示2^8=256个数无符号的char从0开始取256个整数最大是255。当表示有符号数时则用128个数表示-1~-128另一半表示0~128。
其他类型的位数为:
* short 16位
* int 32位
* long 与总线位宽有关不低于32位
* long long 64位
* float 32位浮点数非常不精确
* double 64位浮点数精确
另一种变量是如下定义的:
2018-03-17 00:28:57 +08:00
```cpp
int* pointer;
```
2018-03-16 23:51:20 +08:00
2018-03-17 00:28:57 +08:00
这种变量被称作指针,或指针变量。
2018-03-16 23:51:20 +08:00
之前我们说变量的值可以被反复修改,也就是可以这样做:
2018-03-17 00:28:57 +08:00
```cpp
int aint;
2018-03-16 23:51:20 +08:00
2018-03-17 00:28:57 +08:00
aint = -56; // 初始化赋值。
aint += 3
aint ++
```
2018-03-16 23:51:20 +08:00
这种做法叫做变量赋值。有时候我们需要在定义变量的时候就为变量赋值,可以这样做:
2018-03-17 00:28:57 +08:00
```cpp
double aflt = 3.14
```
变量的第一次赋值被称作初始化。注意,如果一个变量没有经过初始化就被使用了,那是很危险的,尤其是没有初始化的指针变量。
通常,在定义一个变量的同时,我们就声明了他,但是这个变量通常只在当前源文件中可见,而一个软件项目会包含很多源文件。如果我们想在另一个源文件中使用这个变量,就需要声明他。例如,在 a.c 这个源文件中定义和初始化变量
```cpp
/**
* @file: a.c
*/
short ashort=16;
```
然后我们在 b.c 文件中声明并使用他
```cpp
/**
* @file: b.c
*/
extern short ashort;
2018-03-16 23:51:20 +08:00
2018-03-17 00:28:57 +08:00
ashort++;
```
2018-03-16 23:51:20 +08:00
2018-03-17 00:28:57 +08:00
# 2.1.7 符号常量
2018-03-16 23:51:20 +08:00
2018-03-17 00:28:57 +08:00
# 2.1.8 运算符
2018-03-16 23:51:20 +08:00
2018-03-17 00:28:57 +08:00
# 2.1.9 宏
2018-03-16 23:51:20 +08:00
2018-03-17 00:28:57 +08:00
# 2.1.10 指针
2018-03-16 23:51:20 +08:00
指针变量的长度与总线位宽有关如32位机则指针变量长度为464位机为8。
2018-03-17 00:28:57 +08:00
# 2.1.11 语句
# 2.1.12 头文件