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

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

相关推荐
我是李武涯22 分钟前
从`std::mutex`到`std::lock_guard`与`std::unique_lock`的演进之路
开发语言·c++
yuuki23323327 分钟前
【数据结构】用顺序表实现通讯录
c语言·数据结构·后端
史不了1 小时前
静态交叉编译rust程序
开发语言·后端·rust
ad钙奶长高高1 小时前
【C语言】扫雷游戏详解
c语言
读研的武2 小时前
DashGo零基础入门 纯Python的管理系统搭建
开发语言·python
Andy2 小时前
Python基础语法4
开发语言·python
但要及时清醒2 小时前
ArrayList和LinkedList
java·开发语言
孚亭2 小时前
Swift添加字体到项目中
开发语言·ios·swift
hweiyu002 小时前
Go、DevOps运维开发实战(视频教程)
开发语言·golang·运维开发