2011-11-15 47 views
1

我有一些地方后来者都PARLY由早期的是否可以使用#字符串与定义的常量?

const char* ID  = "01099BB2"; 
const char* FS_LOCATION_ROOT = "fs:/~0x"; 

我要创建的级联,并使用#如下试图常量字符串常量,但得到的编译错误:

const char* FS_LOCATION = FS_LOCATION_ROOT#ID; 

有没有这种方式来组合字符串?

+0

字符串化是一种预处理器功能。在实际的语言C本身中没有这样的东西。如果这些是真正的常量,你可以使用预处理器宏和#define ... –

回答

4

这取决于你想要对这些字符串做什么。串化器操作数#是预处理器的一部分,因此必须出现在宏定义中。它看起来不像它会帮助你满足你的特殊情况。但是,您可以简单地使用secuential字符串文字串联的事实。

"fs:/~0x" "01099BB2" is turned into "fs:/~0x01099BB2" 

但是,您不能在变量中使用它,只能使用文字。你可以做这样的事情:

#define ID "01099BB2" 
#define FS_LOCATION_ROOT "fs:/~0x" 

#define FS_LOCATION FS_LOCATION_ROOT ID 

或更好,但

const char* FS_LOCATION = FS_LOCATION_ROOT ID 

不过,我倒觉得这两次定义一个名为ID宏之前。

+0

谢谢,我没有意识到他们可以像这样连接起来。名称ID是一个截断版本,用于在这里发布而不是真实姓名。 – Gruntcakes

1

不一旦它们被定义为符号。我想,你可以同时产生两者。

#define stupid_macro(ID,ROOT) \ 
    const char *id = #ID ; \ 
    const char *root = #ROOT ; \ 
    const char *both = #ID #ROOT ; 

我并没有完全测试,以验证stringize东西的作品,但它应该这样结束了。

const char *id = "id_val" ; 
const char *root = "root_val" ; 
const char *both = "id_val" "root_val" ; 

最后一个将连接它们。这当然是合法的,但我不能说它的道德。

相关问题