//把变量和表达式转换成字符串
/*
写调试代码的时候,编写由包含变量名和后跟变量的字符数组组成的打印表达式是很乏味的。幸运的是,标准C具有字符串化运算符'#'。在一个预处理器宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组。把这一点与没有插入标点符号的若干个字符数组结合而链接车给你一个单独的字符数组,能够生成一个十分方便的宏与调试期间打印出变量的值:
#define PR(x) cout << #x " = " << x << endl;
如果调用宏PR(a)来打印变量a的值,它和下面的代码有相同的效果:
cout << "a = " << a << endl;
整个表达式工作过程一样。下面的程序使用一个宏创建了一种速记方式打印出字符串化的表达式,然后计算表达式并打印出结果:
*/
//:
#include<iostream>
using namespace std;
const int maxn = 50;
//以一个宏开始,节省输入,增加程序可读性。
//使用了“字符串化的预处理器特征(在表达式前用一个'#'实现),其作用是获得
//任何一个表达式并把它转换成为一个字符数组。”以此来允许打印表达式……
#define P(EX) \
cout << #EX << ":" << EX << endl;
int main()
{
int n, a[maxn];
cout << "Enter the size: ";
cin >> n;
cout << "Enter n numbers:" << endl;
for(int i = 0; i < n; ++i)
a[i] = i;
int* ip = a;
P(*ip);
P(*++ip);
P(*(ip+5));
int* ip2 = ip + 5;
P(*ip2);
P(*(ip2-4));
P(*--ip2);
P(ip2-ip);
return 0;
}///:~
/*
可以看到这样的技术是如何成为必不可少的,特别是在没有调试器(或者必须使用多个开发环境)的情况下。当不想调试时,也可以插入一个#ifdef使得定义的P(EX)不起作用。
*/
方便的预处理器特征(宏)
最新推荐文章于 2025-03-10 11:20:42 发布