-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathC_2.txt
More file actions
93 lines (67 loc) · 4.16 KB
/
C_2.txt
File metadata and controls
93 lines (67 loc) · 4.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
==类型/运算符/表达式==
1.变量可以由数字,字母,下划线构成,第一个字符不能是数字,常以大写字母代表常量,小写字母代表变量,下划线开头的多为一些标准例程.
自带的"关键字"都是小写.
2.feof(fp) 当文件进行到末尾,返回值1,否则返回值为0.
EOF 文件的末尾标识,以ASCII码的角度来说,就是当文件处于字符值为-1时的情况.
3.字符类型前面的"限定符":short int, long int. short>=2个字节, long>=32字节.
unsigned/signed对于同样的占用一个字节的字符类型,unsigned的范围是0-256,signed的范围是-128-127.
//这两个头文件里有你想找的类型的定义
limits.h
float.h
quiz-2-1:确定一个signed或unsign的字符类型的取值范围.
[1]可以直接调用库文件limits.h中的宏定义:SCHAR_MIN,SCHAR_MAX,UCHAR_MAX等等,具体的自己去limits.h和float.h文件看.(浮点数的部分不是很清楚定义在哪,感觉值不是很对?需要确认.)
[2]如果需要自己计算,一个判断(sign还是unsign),如果是unsign,则范围是0到(2^字节数-1),字节数可以通过sizeof读出来;如果是sign,依然通过sizeof读出字节数,范围是-(2^一半字节数)到(2^一半字节数-1).
4.#undef xx xx //和#def意义相反,取消这一个宏定义
5.以L或l结尾的常量表示数字太大-->1234567L
以u或U结尾的常量表示是unsigned类型-->2765ul 或 4567UL (加L表示是unsigned long)
浮点数的表示-->123.4, 1234e-3
数字的各种进制表示-->2,8,10,16进制
6.C中的全部转义字符如下:
\a 响铃符 \\ 反斜杠
\b 回退符 \? 问号
\f 换页符 \' 单引号
\n 换行符 \" 双引号
\r 回车符 \ooo 八进制数
\t 横向制表符 \xhh 十六进制数
\v 纵向制表符 \0 空字符NULL
7.'x'-->字符,有对应的ASCII码值, "x\0"-->字符串,只有一个字符x的字符串
8.枚举常量(常量列表)
enum 字符类型(该类型包含的所有可能的值...); //无显示说明的情况下,enum类型中枚举名的值依次向后递增
9.限定符"const",被限定的变量,数组所有元素值都不能被修改,
10.volatile int xx; //禁止访存操作
auto int xx; //自动变量,一般不说明都这个,声明时分配堆栈空间,用完即回收堆栈
static int xx; //静态变量,固定划分一块内存存储数据
register int xx; //指定专用寄存器去存放数据
11.默认情况下,全局变量,外部变量,静态变量被初始化为0,自动变量初始化为-->未定义值/无效值/NULL(在linux gcc里测试这里初始化也是0)
12.取模运算%不能用于浮点数,如果操作数由负数,则(-a)%b=-c, a%(-b)=c
(算数运算符 > 关系运算符 > 相等性运算符 > 逻辑运算符)
具体运算符的优先级和运算顺序可以参考Pxx的表
//ctype.h头文件中有一些字符转换的库函数,例如tolower(), isdigit(),
13.char向int转换可能结果为负,如果char类型变量里存储非字符型数据,考虑增加可移植性,char类型字符一定指定signed或unsigned限定符.
14.运算中的类型转换(非unsigned的情况下,unsigned的数字会使数字变得很大)
向着位数更多的类型转换(例外,float不会自动转换为double);
在赋值中,右边的值会转换成等号左边值的类型;
在没有函数原型的情况下,char和short类型操作数都会转换成int类型;
长位数整型向低位数强制转换时,会舍弃掉高位的信息,浮点类向整型转换时舍弃掉小数部分,双精度向单精度转换时会进行四舍五入或截取;
15.assert()
函数原型在assert.h中,属于断言操作,当条件返回错误则终止程序执行。视觉判断效果类似于if,但有很大区别。
//禁止assert断言判断,断言会大大影响程序执行效率。
#include <stdio.h>
#define NDEBUG
#include <assert.h>
16.malloc和free尽量成对使用,malloc分配完内存后一定加一个判断返回指针是否为空。
int* p = NULL;
p = int* malloc(sizeof(int));
if(p! = NULL){
...
}
free p;
17.selinux权限不足的问题,可以把avc的日志保存起来,然后用"audit2allow -i avclogfile"来看怎么修改
18.ifdefined问题
#ifdef MACRO1
/* 处理1 */
#elif defined MACRO2
/* 处理2 */
#else
/* 处理3 */
#endif