字符串转换宏

时间:2018-12-25 09:48:14

标签: c gcc c-preprocessor

我必须存储一些具有自定义编码的字符串(例如A-> 0,B-> 1等)。

我希望能够将它们声明为:

u8 string1[] = ENCODE("ABC");

而不是:

u8 string1[] = {0, 1, 2};

因此ENCODE是一个宏,应发展为表示编码字符串的字节数组(当我在使用它时,它应添加一个字符串终止符值)(此处u8是无符号字符的别名)。

我绝对不知道使用C预处理程序是否可行。但是我会感到惊讶。

2 个答案:

答案 0 :(得分:1)

我怕你不能。顾名思义,预处理器在实际编译之前会对文件进行处理。它对数组,字符串等一无所知。

答案 1 :(得分:-1)

宏无法访问字符串的各个字符。

作为一个复杂的问题,如果string1应该具有静态存储时间(全局,函数中的static等),则您甚至不能使用字符串文字,因为初始化程序中的整数值必须为整数常量表达式

对于非静态初始值设定项,您可以使用某种可扩展为嵌套? :的表达式,但它同样糟糕-容易被函数替换。


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