C语言中的部分常用宏定义格式

这里记录几种C语言常用的宏定义。

①形如:#define UNUSED(x) (void)(x)

这种宏定义一般用于规范编程,假设一个子函数中,需要传入3个参数,但如果在子函数内部只需要使用了2个参数,如果对另一个参数置之不理,有些编译器就会报错,这时候就可以使用这个宏来消除错误。主要用法可以看下面的例子:

复制代码
#include <stdio.h>

#define UNUSED(x) (void)(x)



void sub(int a,char b) {

UNUSED(a);

printf(&b);

}



int main() {

sub(1,'z');

return 0;

}

上述代码的打印结果:z

上面声明的sub函数中,传入了两个参数,但实际打印只用了第二个参数,如果不管第一个参数,有的编译器就会报错,所以我们定义了UNUSED宏,调用这个宏,就可以避免此类错误。

注意:UNUSED这个名字是可以改的,只要写法一致就行,但是最好名字不要乱起,要一看就能明白其含义即可。

②形如:#define SWAPWORD(x) (x)

这种宏定义的含义很清楚,给SWAPWORD后传入一个参数,这个参数保持不变,这并没有什么意义,这只是这种宏最简单的形式,一般其用法会如下所示:

#define SWAPWORD(x) ((((x) & 0xFF00) >> 8) | (((x) & 0x00FF) << 8))

这个我们来举个例子说明,假设我们有SWAPWORD(0xBBCC),(x) & 0xFF00)和(x) & 0x00FF)即将这个x的高八位和低八位都取出来,得0xBB00和0x00CC,然后将0xBB00右移8位得0xBB,将0x00CC左移8位得0xCC00,再将两个得到的值或处理,得0xCCBB。这样一看,这个宏的作用就是将传入的一个16位字(WORD)的高半字节和低半字节进行交换。这里知识举了一个例子,具体后面怎么设置,都要看具体的需求。看一下代码例子:

复制代码
#include <stdio.h>

#define    SWAPWORD(x)    ((((x) & 0xFF00) >> 8) | (((x) & 0x00FF) << 8))



int main() {

int a = 0xBBCC;

printf("%x\n", a);

a=SWAPWORD(a);

printf("%x\n",a);

return 0;

}

打印结果:

bbcc

ccbb

这个宏的名字最好也是按照其功能进行取名,好识别。

③使用##

##在宏定义中,就相当于粘贴。一般用法形如:#define AFFIX(a, b) a ## b

假设你定义了一个变量int xy=5;这时候就可以使用AFFIX(x, y)来表示这个变量,即AFFIX就是通过##将这x和y粘起来称为xy。例子如下:

复制代码
#include <stdio.h>

#define AFFIX(a, b) a ## b



int main() {

int xy = 5;

int a = AFFIX(x, y);

printf("a: %d\n", a);

return 0;

}

结果:

a: 5

这里只是记录了最基本的用法举例,具体使用时还要接着学习。

相关推荐
小蒜学长21 小时前
springboot基于javaweb的小零食销售系统的设计与实现(代码+数据库+LW)
java·开发语言·数据库·spring boot·后端
会开花的二叉树1 天前
c语言贪吃蛇游戏开发
c语言·开发语言
韩立学长1 天前
【开题答辩实录分享】以《C#大型超市商品上架调配管理系统的设计与实现》为例进行答辩实录分享
开发语言·c#
十重幻想1 天前
PTA6-4 使用函数统计指定数字的个数(C)
c语言·c++·算法
夜月yeyue1 天前
ART 加速器、流水线与指令预测的关系详解
linux·服务器·c语言·单片机·嵌入式硬件·性能优化·嵌入式高阶技巧
迎風吹頭髮1 天前
UNIX下C语言编程与实践36-UNIX 时钟:系统时间、高分辨率时间与日历时间的转换与使用
服务器·c语言·unix
Yupureki1 天前
从零开始的C++学习生活 5:内存管理和模板初阶
c语言·c++·学习·visual studio
tao3556671 天前
【Python刷力扣hot100】49. Group Anagrams
开发语言·python·leetcode
龙腾AI白云1 天前
大模型-扩散模型(Diffusion Model)原理讲解(4)
开发语言
爱吃小胖橘1 天前
Lua语法(2)
开发语言·unity·lua