高端技巧:怎样使用#define定义变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高端技巧:怎样使用#define定义变量相关的知识,希望对你有一定的参考价值。

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了,我们成功定义了与行号有关的变量了!



以上是关于高端技巧:怎样使用#define定义变量的主要内容,如果未能解决你的问题,请参考以下文章

C语言陷阱与技巧第7节,define函数式宏定义不能用普通函数代替吗?为什么要使用do{}while包裹代码

gcc编译汇编源码时怎样支持#define宏定义

VS中添加自定义代码片段——偷懒小技巧

可以使用命令define定义变量吗

C语言中定义常数变量怎么定义 用define的那种

2C++ 的升级