我有一些地方后来者都PARLY由早期的是否可以使用#字符串与定义的常量?
const char* ID = "01099BB2";
const char* FS_LOCATION_ROOT = "fs:/~0x";
我要创建的级联,并使用#如下试图常量字符串常量,但得到的编译错误:
const char* FS_LOCATION = FS_LOCATION_ROOT#ID;
有没有这种方式来组合字符串?
我有一些地方后来者都PARLY由早期的是否可以使用#字符串与定义的常量?
const char* ID = "01099BB2";
const char* FS_LOCATION_ROOT = "fs:/~0x";
我要创建的级联,并使用#如下试图常量字符串常量,但得到的编译错误:
const char* FS_LOCATION = FS_LOCATION_ROOT#ID;
有没有这种方式来组合字符串?
这取决于你想要对这些字符串做什么。串化器操作数#
是预处理器的一部分,因此必须出现在宏定义中。它看起来不像它会帮助你满足你的特殊情况。但是,您可以简单地使用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
宏之前。
谢谢,我没有意识到他们可以像这样连接起来。名称ID是一个截断版本,用于在这里发布而不是真实姓名。 – Gruntcakes
不一旦它们被定义为符号。我想,你可以同时产生两者。
#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" ;
最后一个将连接它们。这当然是合法的,但我不能说它的道德。
字符串化是一种预处理器功能。在实际的语言C本身中没有这样的东西。如果这些是真正的常量,你可以使用预处理器宏和#define ... –