C語言中以字串形式輸出列舉變數

strikedragon發表於2020-10-15

 1. 列舉應用說明


每個列舉常量對應一個整形數字,很多時候可以像整形一樣使用;但是如果要求列印列舉變數名的字串,

辦法也有很多,檢視網上方法幾乎都需要轉換,要麼用陣列,下面要說的是一種可以算是直接列印的新方法; 

 程式碼:

 
  1. #include <stdio.h>

  2.  
  3. #define ENUM_CHIP_TYPE_CASE(x) case x: return(#x);

  4.  
  5. enum cvmx_chip_types_enum {

  6. CVMX_CHIP_TYPE_NULL = 0,

  7. CVMX_CHIP_TYPE_DEPRECATED = 1,

  8. CVMX_CHIP_TYPE_OCTEON_SAMPLE = 2,

  9. CVMX_CHIP_TYPE_MAX

  10. };

  11.  
  12.  
  13. static inline const char *cvmx_chip_type_to_string(enum cvmx_chip_types_enum type)

  14. {

  15. switch (type){

  16. ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_NULL)

  17. ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_DEPRECATED)

  18. ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_OCTEON_SAMPLE)

  19. ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_MAX)

  20. }

  21. return "Unsupported Chip";

  22. }

  23.  
  24. int main()

  25. {

  26. cvmx_chip_types_enum a;

  27.  
  28. while(1){

  29. printf("input(0~3):");

  30. scanf("%d",&a);

  31. if(a<CVMX_CHIP_TYPE_NULL||a>CVMX_CHIP_TYPE_MAX){

  32. printf("error,you must input number between 0 and 3,

  33. please try again!\n\n");

  34. continue;

  35. }

  36. printf("\n");

  37.  
  38. printf("the result:%s \n\n",cvmx_chip_type_to_string(a));

  39. }

  40.  
  41. return 0;

  42. }

 

2. 測試結果


 

如果不想全部列印出名字,只想列印出後面幾個字元,例如“CVMX_CHIP_TYPE_DEPRECATED”,

只要列印後面“DEPRECATED”字串,上面程式碼只需修改巨集:

#define ENUM_CHIP_TYPE_CASE(x)   case x: return(#x); 改為下面所示

#define ENUM_CHIP_TYPE_CASE(x)   case x: return(#x+15);  //從第16個字串開始列印,不要前面15個

 

結果如下:

相關文章