首页 新闻 会员 周边 捐助

C++宏定义作用

0
[待解决问题]

define de(x) cerr<<#x<<" = "<<x<<endl

想请教下各位大佬,这个宏定义作用是什么?前面#有什么用

黑暗尽头的超音速炬火的主页 黑暗尽头的超音速炬火 | 菜鸟二级 | 园豆:216
提问于:2020-03-07 10:52
< >
分享
所有回答(2)
0

将标识符变转成字符串

jakio6 | 园豆:1325 (小虾三级) | 2020-03-07 11:42

谢谢,请问您的意思是
比如:
x=6 是int

x 变为了 #6这个字符串嘛

麻烦问下,这个define整体是想干什么呢

@黑暗尽头的超音速炬火: 打印一个变量的值,并且在打印的输出里加上这个变量的名称

#de(x) #x的话de(somevar)会被替换为"somevar"

支持(0) 反对(0) jakio6 | 园豆:1325 (小虾三级) | 2020-03-07 19:28

就像这样

➜  tmp cat test.c
#define de(x) #x
#define a(x) prefix_##x

de(somevar)

a(somevar)
➜  tmp cpp test.c
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "test.c"



"somevar"

prefix_somevar
➜  tmp
支持(0) 反对(0) jakio6 | 园豆:1325 (小虾三级) | 2020-03-07 19:33

@黑暗尽头的超音速炬火: 宏是预处理, 预处理的时候没有变量. 只是进行字符串替换.

支持(0) 反对(0) jakio6 | 园豆:1325 (小虾三级) | 2020-03-07 19:37
0

写了一个demo,方便理解:

#include <iostream>

using namespace std;

#define de(x) cout << #x <<" = "<< x <<endl

int main(){
    string a = "hello world!";
    de(a);
}

g++ -Wall -std=c++11 -o hello hello.cpp

运行程序的输出结果

从图片上能看到#x将标识符转换成字符串的形式
这种宏定义的作用:

  1. 一般是用来查看某个变量的值是什么,用于调试或者打印关键的字段值
  2. 很多日志库里面会有类似的宏定义,可参考log4cplus库

如有帮助,请采纳~~~ 😄

wengle | 园豆:567 (小虾三级) | 2020-03-07 13:09

谢谢,请问这种用法只能在头文件吗?能否在主函数中使用,或者是否有类似的用法呢

@黑暗尽头的超音速炬火:

  1. 宏一般定义在头文件
  2. 能否在主函数中使用?是什么意思?在主函数使用宏吗?
支持(0) 反对(0) wengle | 园豆:567 (小虾三级) | 2020-03-09 23:25

@wengle: 请问这种用法有在主函数中直接实现的吗?就是不用宏定义,其他的写法在主函数直接定义达到输出类型和变量的目的

清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册