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

最新文章

  1. sshpass----------------sshfs--sftp(sublime)
  2. C——malloc & free(转载自bccn C语言论坛)
  3. Github for Windows使用介绍
  4. [LeetNode]Sort List
  5. eclipse内使用tomcat项目究竟被部署到了哪里
  6. Linux-ubuntu
  7. Java集合类之HashMap
  8. CSS学习之盒子模式
  9. 【转】android 开发 命名规范
  10. 贪心+树状数组维护一下 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) D
  11. Node.js JXcore 打包
  12. 存储与服务器的连接方式对比(DAS,NAS,SAN)
  13. css-animate制作列表鼠标移动覆盖透明层
  14. SQL-11 获取所有员工当前的manager,如果当前的manager是自己的话结果不显示
  15. 2018.12.21 bzoj3238: [Ahoi2013]差异(后缀自动机)
  16. iOS下载图片失败
  17. 【转】java基本数据类型vs封装数据类型
  18. windows下python管理右键菜单
  19. Apache配置支持目录浏览
  20. ArcGIS ArcMap 问题(ArcMap闪退、cx_oracle安装不上)

热门文章

  1. Angular CLI 安装
  2. 重拾Python(4):Pandas之DataFrame对象的使用
  3. linux 基本使用命令
  4. 机器学习基石:09 Linear Regression
  5. PHPCMS v9.5.8-设计缺陷可重置前台任意用户密码
  6. [SDOI 2013]方程
  7. [SDOI 2017]新生舞会
  8. Codeforces Round #430 B. Gleb And Pizza
  9. bzoj4559[JLoi2016]成绩比较 容斥+拉格朗日插值法
  10. C语言程序设计第三次作业——选择结构(1)