22/10/24 查漏补缺
(C99) 布尔类型
-
C99标准添加了_Bool类型,用于表示布尔值.
-
_Bool类型实际上也是一种整数类型,但原则上他只占据1位存储空间.
-
使用它需要引入
stdbool.h
(C99) 可移植类型: stdint.h
和 inttypes.h
<stdint.h>
定义了 int16_t
、 uint32_t
、 int64_t
等整型.
举个例子:
#include<stdio.h>
#include<inttypes.h>
#include<stdint.h>
int main(){
int32_t me32; // me32是一个32位有符号的整型变量
me32 = 11451419;
printf("First, int32_t is a int: \n");
printf("me32 = %d\n",me32);
printf("Next, let's not make any assumptions. ");
printf("Instead, use a \"macro\" from inttypes.h: \n");
printf("me32 = %" PRId32 "\n",me32);
return 0;
}
假如一个系统最低支持的整数类型是16位, int8_t
就会有问题. 这个时候可以使用 int_latest8_t
, 虽然系统不支持8位, 但会把这个整数当做16位来实现.
(C99) 复数和虚数类型
C语言有三种复数类型:
- float _Complex
- double _Complex
- long double _Complex
例如 float_Complex, 包含了两个float类型的值, 一个表示实部, 一个表示虚部.
C语言有三种虚数类型:
- float _Imaginary
- double _Imaginary
- long double _Imaginary
如果包含 complex.h
头文件, 就可以使用 complex 代替 _Complex , 用 imaginary 代替 _Imaginary.
size_t 类型
sizeof() 返回了一个size_t类型, 因此如果我们尝试在 printf() 中用%d格式化输出就会报一个warning.
其实 size_t 就是 long unsigned int 或者 unsigned int 的别名. C99可以用 %zd 来输出 size_t, 如果不支持的话可以使用 %ld.
逗号运算符
逗号运算符扩展了for语句的灵活性.
for(表达式,表达式 ; 条件 ; 表达式,表达式){
...Code...
}...
continue, break, default, goto
- continu: 跳过本次循环的剩余部分,进入下一轮循环.
- break: 跳出整个循环.
- default: 一般在switch中用,其他地方是不能用的. 只会在case匹配失败时运行.
- goto: 可以直接跳到某个标签的位置继续运行. 应尽量避免使用goto语句.
缓冲区
- 缓冲区分为两种:
- 完全缓冲I/O: 缓冲区填满才刷新缓冲区.
- 缓冲区大小取决于系统,一般为512字节和4096字节.
- 行缓冲I/O: 出现换行符时刷新缓冲区.
- 完全缓冲I/O: 缓冲区填满才刷新缓冲区.
- ANSI C后标准输入默认都是缓冲的.
有空弄个文件方面的查漏补缺(其实文件啥都不会,再梳理一遍)