我有一个C程序,其中包含一些错误代码的定义.像这样:
#define FILE_NOT_FOUND -2 #define FILE_INVALID -3 #define INTERNAL_ERROR -4 #define ... #define ...
是否可以按其值打印定义的名称?像这样:
PRINT_NAME(-2); // output FILE_NOT_FOUND
@R_403_323@
简而言之,没有.最简单的方法就是这样(请注意:这假设您永远不会将错误分配给零/ null):
//Should really be wrapping numerical definitions in parentheses. #define FILE_NOT_FOUND (-2) #define FILE_INVALID (-3) #define INTERNAL_ERROR (-4) typdef struct { int errorCode; const char* errorString; } errorType; const errorType[] = { {FILE_NOT_FOUND,"FILE_NOT_FOUND" },{FILE_INVALID,"FILE_INVALID" },{INTERNAL_ERROR,"INTERNAL_ERROR" },{NULL,"NULL" },}; // Now we just need a function to perform a simple search int errorIndex(int errorValue) { int i; bool found = false; for(i=0; errorType[i] != NULL; i++) { if(errorType[i].errorCode == errorValue) { //Found the correct error index value found = true; break; } } if(found) { printf("Error number: %d (%s) found at index %d",errorType[i].errorCode,errorType[i].errorString,i); } else { printf("Invalid error code provided!"); } if(found) { return i; } else { return -1; } }
请享用!
此外,如果您想节省更多的输入,可以使用预处理器宏使其更整洁:
#define NEW_ERROR_TYPE(ERR) {ERR,#ERR} const errorType[] = { NEW_ERROR_TYPE(FILE_NOT_FOUND),NEW_ERROR_TYPE(FILE_INVALID),NEW_ERROR_TYPE(INTERNAL_ERROR),NEW_ERROR_TYPE(NULL) };