我必须存储一些具有自定义编码的字符串(例如A-> 0,B-> 1等)。
我希望能够将它们声明为:
u8 string1[] = ENCODE("ABC");
而不是:
u8 string1[] = {0, 1, 2};
因此ENCODE是一个宏,应发展为表示编码字符串的字节数组(当我在使用它时,它应添加一个字符串终止符值)(此处u8是无符号字符的别名)。
我绝对不知道使用C预处理程序是否可行。但是我会感到惊讶。
答案 0 :(得分:1)
我怕你不能。顾名思义,预处理器在实际编译之前会对文件进行处理。它对数组,字符串等一无所知。
答案 1 :(得分:-1)
宏无法访问字符串的各个字符。
作为一个复杂的问题,如果string1
应该具有静态存储时间(全局,函数中的static
等),则您甚至不能使用字符串文字,因为初始化程序中的整数值必须为整数常量表达式。
对于非静态初始值设定项,您可以使用某种可扩展为嵌套? :
的表达式,但它同样糟糕-容易被函数替换。
您可以使用单个字符和可变参数宏。