C++预处理器如何转换成字符?
问题描述:
举个代码例子讲得清楚。
#include <iostream>
using namespace std;
#define toChar(c) (/*#mac#*/ c)
int main(int argc,char **argv) {
cout << toChar(?) << endl;
return 0;
}
注释的那部分填上,将输出语句改成cout << '?' << endl;
,注意是 字符 不是 字符串 ##
。
答
#define to_char(a) (@#(a)) //将一个一位数转换成字符
#define to_string(a) (#(a)) //将一个多位数转换成字符串
#define string_cat(a, b) ((a)##(b))//将两个字符串连接
int main() {
cout << string_cat( to_string(3.141592), to_char(6) );
return 0;
}
运行结果:
3.1415926
注:在#define宏中,#代表加上双引号,@#代表加上单引号, ##代表连接。
求采纳!
答
预处理应该做不到将 toChar() 的替换成''的形式。
因为要达到目的,实际上是要预处理程序为前后拼接上一个单引号',而单双引号这样的符号都是有特殊含义的且必须成对出现。
以下实现可以在实现相应的效果,供参考:
#define toChar(c) (#c[0])
#define toChar(c) (((const char*)#c)[0])