2016-07-04 106 views
1

我如何到L添加前缀宏

#define STRING "string" 

我要到L添加前缀字符串宏后来在我的代码(我不能做到这一点的定义)。怎么做?

+0

的文本替换宏的作品,是一个编译时机制。您无法在运行时随时随地更改它。 –

+0

你知道。也许它不是重复的。你是什​​么意思**完全**由*“添加L前缀”*? – StoryTeller

回答

4

这应该这样做:

#include <stdio.h> 


#define CONCATENATE(e1, e2) e1 ## e2 
#define PREFIX_L(s) CONCATENATE(L, s) 

#define STRING "string" 

int main(void) 
{ 
    printf("%ls\n", PREFIX_L(STRING)); 
} 

这些标准的C预处理器的级联能力也涵盖与GCC未来的文档:https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html

+1

这不是一个gcc功能,而是标准功能。 – Olaf

+0

@Olaf:我知道,但是该页面指的是GCC文档...:} – alk

+0

@Olaf:你没有因此而倒下,是吗? | - ) – alk

-1

这应该工作。

#define STRING(x) x"string" 

char * l_pString = STRING(""); 
wchar_t * l_pWideString = STRING(L); 
+0

这是不正确的。 http://ideone.com/xIn2Br 您不能忽略宏参数。 – StoryTeller

+0

加入@StoryTeller只是在第一种情况下通过'“”'。 – alk