高端技巧:如何使用#define定义变量

来源:互联网 发布:昏君培养系统知风 编辑:程序博客网 时间:2024/04/30 23:47

Introduction

想在源文件中定义一个跟行号有关的变量,每次都手动输入实在是太慢了,本文介绍如何使用宏定义来定义与行号有关的变量。

例如:我们想在源代码的第10行定义A_10这样的一个整形变量。

用宏定义来完成使命

在宏定义中,标准C/C++中给出了两个特殊的操作符:#和##。#是用于给红参数添加双引号;##用于链接两个宏参数,既然可以连接两个宏参数,那我们就可以链接一个首字母和行号作为一个整体了!

于是,我们就这样写:

#define MM(A) A##__LINE__int main(){int MM(C);}

编译后发现,我们定义的竟然是C__LINE__这个变量,并不是我们想要的!为什么呢?
因为编译器在预处理的时候并没有把__LINE__展开,而是把它看成了一个整体!怎么办?
我们可以通过再定义另一个宏来先展开行号,然后在作为参数调用MM这个宏。

#define AA(B,C) B##C#define BB(B,C) AA(B,C)#define DD(A) BB(A,__LINE__)int main(){int DD(V);}

OK了,我们成功定义了与行号有关的变量了!

6 3