【问题标题】:C preprocessor Literal ConstructionC 预处理器文字构造
【发布时间】:2012-11-07 17:32:00
【问题描述】:

我的问题如下:

我有一个像这样宏编辑的字符串文字

#define TITLE "Title"

但在某些情况下,我需要传入此字符串的宽字符变体。我希望能够将L"Title" 传递给这些函数。所以很自然地,我开始尝试根据TITLE 定义一个新的宏W_TITLE

但我没有运气,我所有的方法(如下所列)都失败了。请告诉我这样的魔法是如何实现的。

我试过了

#define W_TITLE L##TITLE
#define W_TITLE #L TITLE
#define W_TITLE ##L TITLE

但他们都失败了......

【问题讨论】:

标签: c c-preprocessor


【解决方案1】:

试试这个:

#define WIDEN_(exp)   L##exp
#define WIDEN(exp)    WIDEN_(exp)
#define TITLE         "Title"
#define W_TITLE       WIDEN(TITLE)

您需要通过一个中间宏强制展开以获得您要查找的内容。

#include <stdio.h>

#define WIDEN_(exp)   L##exp
#define WIDEN(exp)    WIDEN_(exp)
#define TITLE         "Title"
#define W_TITLE       WIDEN(TITLE)

int main(int argc, char *argv[])
{
    printf("%s\n", TITLE);
    wprintf(L"%ls\n", W_TITLE);
    return 0;
}

结果:

Title
Title

【讨论】:

  • 聪明。我会尝试类似的方法,但对我来说并不是很明显。
猜你喜欢
  • 2011-02-13
  • 2015-06-18
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2011-07-02
相关资源
最近更新 更多