而用专题

为什么一些宏不用{}而用do{}while(0)

自从工作以来偶尔会在代码里见到一些do{}while(0)形式的宏定义,但是当初并不知道这样做的目的是什么,总觉得单单用一下{}就可以实现相同的功能了。 最近在看linux内核源码,里面有一堆do{}while(0)的宏,于是查了一下,发现有的情况只能用do{}while(0)的形式来定义宏,用单纯的{}会导致报错。 实验代码如下: #include <stdio.h>#define MACRO

无线局域网为什么不用 CSMA/CD 而用 CSMA/CA

CSMA/CD:载波侦听多路访问/碰撞检测 CSMA/CA:载波监听多路访问/碰撞避免 CSMA/CD协议已经成功地应用于使用有线连接的局域网,但在无线局域网的环境下,却不能简单地搬运CSMA/CD协议。 主要有两个原因: (1)接受信号的强度往往会小于发送信号的强度,且在无线介质上信号强度动态变化范围很广。因此若要实现碰撞检测,在硬件上的花费就会过大; (2)在无线通信中,并非所有的站点都