我需要将枚举成员(其值,而不是标识符)转换为字符串。
我尝试了以下方法,该方法适用于MACRO(TYPE_A),但不适用于枚举值(typeA)。我认为这有点奇怪。

你有什么想法吗?

#define _tostr(a) #a#define tostr(a) _tostr(a)typedef enum _SPECIAL_FOLDER_ID { typeA = 3, typeB = 4,} SPECIAL_FOLDER_ID;#define TYPE_A 3int main() { //this is working, but the information is a macro (TYPE_A) printf("The string is " tostr(TYPE_A) ".\n"); //this is not working for typeA (defined in an enumeration) printf("The string is " tostr(typeA) ".\n"); return 0;}


输出为:

字符串是3。
字符串是typeA。


我需要以某种方式修改代码,以使输出的第二行为“字符串为3”。

谢谢!

PS:我不想使用printf打印该值。我需要一个包含该值的静态字符串。我只用printf来测试结果...

最佳答案

预处理器不了解C。它仅了解“文本”。
在处理文件时,typeA仅为5个字母。只有编译器会知道(在预处理程序完成之后)typeA具有一个值,并且该值为3。

10-08 13:31