C语言编程规范
本文记录C语言中编程规范中需注意的点,经常复习~
# 整数
# 有符号整数溢出
警告
错误示范
int a = .. // 来自外部的数据
int b = .. // 来自外部的数据
int sum = a + b; // 【溢出】
1
2
3
2
3
提示
正确示范
int a = .. // 来自外部的数据
int b = .. // 来自外部的数据
int sum = 0;
if (((a > 0) && (b > (INT_MAX - a))) || ((a < 0) && (b < (INT_MIN - a)))) {
// 错误处理
}
sum = a + b;
1
2
3
4
5
6
7
2
3
4
5
6
7
# 无符号数回绕溢出
警告
错误示范
size_t len = .. // 来自外部的数据
if (sizeof(SctpAuth) + len > SCTP_SIZE_MAX) { // 【造成溢出,绕开异常分支】
.. // 错误处理
}
.. = malloc(sizeof(SctpAuth) + len); // 【拿到空指针,造成踩内存】
1
2
3
4
5
6
2
3
4
5
6
提示
正确示范
size_t len = .. // 来自外部的数据
if (len > SCTP_SIZE_MAX - sizeof(SctpAuth)) { // 【避开加法】
.. // 错误处理
}
.. = malloc(sizeof(SctpAuth) + len);
1
2
3
4
5
2
3
4
5
编辑 (opens new window)
上次更新: 2022/07/07, 22:54:28