字符串转换宏

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,等等...) ,你甚至不能使用字符串文字,因为初始化器中的整数值需要是 整数常量表达式.

对于非静态初始化程序,您 可以 使用某种扩展为嵌套 ? : 的表达式,但它同样糟糕 - 而且很容易替换为函数。


可以使用单个字符和可变参数宏。