字符串转换宏
String conversion macro
我必须使用自定义编码存储一些字符串(比如 A->0、B->1 等)。
我希望能够将它们声明为:
u8 string1[] = ENCODE("ABC");
而不是:
u8 string1[] = {0, 1, 2};
所以 ENCODE(s) 是一个宏,应该开发为表示编码字符串的字节数组(当我在处理它时,它应该添加一个字符串终止符值)(这里 u8 是 unsigned char 的别名).
我完全不知道使用 C 预处理器是否可行。但我会感到惊讶。
恐怕你做不到。顾名思义,预处理器在实际编译之前对文件进行处理。它对数组、字符串等一无所知。
宏不能访问字符串的单个字符。
作为一个额外的并发症,如果 string1
应该具有 static 存储持续时间(全局,函数中的 static
,等等...) ,你甚至不能使用字符串文字,因为初始化器中的整数值需要是 整数常量表达式.
对于非静态初始化程序,您 可以 使用某种扩展为嵌套 ? :
的表达式,但它同样糟糕 - 而且很容易替换为函数。
您可以使用单个字符和可变参数宏。
我必须使用自定义编码存储一些字符串(比如 A->0、B->1 等)。
我希望能够将它们声明为:
u8 string1[] = ENCODE("ABC");
而不是:
u8 string1[] = {0, 1, 2};
所以 ENCODE(s) 是一个宏,应该开发为表示编码字符串的字节数组(当我在处理它时,它应该添加一个字符串终止符值)(这里 u8 是 unsigned char 的别名).
我完全不知道使用 C 预处理器是否可行。但我会感到惊讶。
恐怕你做不到。顾名思义,预处理器在实际编译之前对文件进行处理。它对数组、字符串等一无所知。
宏不能访问字符串的单个字符。
作为一个额外的并发症,如果 string1
应该具有 static 存储持续时间(全局,函数中的 static
,等等...) ,你甚至不能使用字符串文字,因为初始化器中的整数值需要是 整数常量表达式.
对于非静态初始化程序,您 可以 使用某种扩展为嵌套 ? :
的表达式,但它同样糟糕 - 而且很容易替换为函数。
您可以使用单个字符和可变参数宏。