Sum's blog Sum's blog
  • 知识

    • Markdown语法
    • ASCII (opens new window)
    • 缩略语
  • 语言篇

    • C
    • C++
    • C#
    • Python
    • Verilog
  • 必备篇

    • Git
    • Linux
    • 环境搭建
  • 工作专项

    • WLAN从入门到精通 Wi-Fi 6
    • 企业WLAN架构与技术
  • Games

    • CSGO
  • Evan's

    • OtherBlog
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 摘抄
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Sum

有苦吗我有时间
  • 知识

    • Markdown语法
    • ASCII (opens new window)
    • 缩略语
  • 语言篇

    • C
    • C++
    • C#
    • Python
    • Verilog
  • 必备篇

    • Git
    • Linux
    • 环境搭建
  • 工作专项

    • WLAN从入门到精通 Wi-Fi 6
    • 企业WLAN架构与技术
  • Games

    • CSGO
  • Evan's

    • OtherBlog
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 摘抄
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 语言篇

    • C笔记
    • C++笔记
    • GCC编译参数
    • C#笔记
    • C语言编程规范
      • 整数
        • 有符号整数溢出
        • 无符号数回绕溢出
    • Python

    • Verilog笔记
  • 必备篇

  • 工作专项篇

  • games

  • 笔记
  • 语言篇
wangzhe
2022-07-01
目录

C语言编程规范

本文记录C语言中编程规范中需注意的点,经常复习~

# 整数

# 有符号整数溢出

警告

错误示范

int a = .. // 来自外部的数据
int b = .. // 来自外部的数据
int sum = a + b; // 【溢出】
1
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

# 无符号数回绕溢出

警告

错误示范

size_t len = .. // 来自外部的数据
if (sizeof(SctpAuth) + len > SCTP_SIZE_MAX) { // 【造成溢出,绕开异常分支】
    .. // 错误处理
}
.. = malloc(sizeof(SctpAuth) + len); // 【拿到空指针,造成踩内存】

1
2
3
4
5
6

提示

正确示范

size_t len = .. // 来自外部的数据
if (len > SCTP_SIZE_MAX - sizeof(SctpAuth)) { // 【避开加法】
    .. // 错误处理
}
.. = malloc(sizeof(SctpAuth) + len);
1
2
3
4
5
编辑 (opens new window)
上次更新: 2022/07/07, 22:54:28
C#笔记
Python基础语法

← C#笔记 Python基础语法→

最近更新
01
编程更好地可视化
07-04
02
摘抄
05-29
03
Markdown语法
05-17
更多文章>
Theme by Vdoing | Copyright © 2019-2022 Sum | MIT License | 鲁ICP备20003168号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式