C++ 基础

本文探讨了无符号和有符号运算之间的溢出问题,强调了有符号数运算才可能导致溢出。此外,深入解析了库函数signal在处理异步事件时的复杂性和潜在风险,尤其是在malloc函数执行过程中被信号中断的情况,可能导致数据结构崩溃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.无符号运算之间不会溢出,无符号和有符号数之间也不会溢出,有符号数之间运算才会溢出

if( a > INT_MAX - b)

2.库函数signal:

作为捕获异步事件的一种方式。

假设malloc函数执行过程中被一个信号中断。此时,malloc函数用来跟踪可用内存的数据结构可能只有部分更新。如果signal处理函数malloc,结果可能是malloc函数用到的数据结构完全崩溃,不堪设想。

信号非常复杂棘手,而且从本质上而言不可移植的特性,解决这个问题,我们最好采取守势,让signal尽可能处理的简单,合理的组织在一起。这样,当需要适应一个新系统时,我们可以轻易的进行修改

3.宏:

1.宏之间的空格: #define f (x) ((x-1))

2.即使宏定义中的各个参数与整个结果表达式都被括号括起来,也可能仍有其他问题存在。宏不是函数,只是文本上的替换。

3.宏展开可能是非常庞大的表达式,占用的空间远超我们所想,这个时候,还不如简单写些语句

4.宏也不是语句

  1. 宏并不是类型定义:
#define FOOTYPE  struct foo

 FOOTYPE a;

 FOOTYPE  b,c;

以上合法,但我们最好还是使用类型定义:

typedef struct foo FOOTYPE;

6.标识符名称的限制:

为了保证程序的可移植性,谨慎的选择外部标识符名称是重要的。例如自己编写的Malloc中调用malloc函数,由于c语言编译器会把malloc 和Malloc 当做一个,这样就会引起一系列的递归调用。

7.hash表:多线程,设计模式,多线程,Liunx,Qt,Python,人工智能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值