我有一些字符串常量,后面的字符串常常由早期字符串组成
const char* ID = "01099BB2";
const char* FS_LOCATION_ROOT = "fs:/~0x";
我想创建连接的常量并尝试使用#,如下所示但是出现了编译错误:
const char* FS_LOCATION = FS_LOCATION_ROOT#ID;
有没有办法以这种方式组合字符串?
答案 0 :(得分: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
的宏之前,我会考虑两次。
答案 1 :(得分: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" ;
最后一个将连接起来。这当然是合法的,虽然我不能说它的道德。