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])