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

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

相关推荐
aramae8 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
无敌贵点大王9 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
Logic1019 小时前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
qq_25183645710 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
郑州光合科技余经理11 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手11 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
+VX:Fegn089512 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
阿里嘎多学长12 小时前
2026-09-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Escalating_xu13 小时前
【C 语言项目】数组和函数综合实践:从零实现控制台扫雷游戏
c语言
weixin_3077791314 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab