在调试C语言程序时,有时需要打印宏的名字。可以通过定义宏,宏名字的数组来获得。

例如:

  1. #include <stdio.h>
  2. #define MACRO_STR(x) {x, #x}
  3. typedef struct _macro_str { 
  4. int id; 
  5. char *name; 
  6. }MACRO_STR_T; 
  7. typedef enum _color{ 
  8.     RED, 
  9.     GREEN, 
  10.     BLUE, 
  11. }COLOR; 
  12. MACRO_STR_T g_color_str[] ={ 
  13.     MACRO_STR(RED),  
  14.     MACRO_STR(GREEN), 
  15.     MACRO_STR(BLUE), 
  16.     {-1, NULL} 
  17. }; 
  18. static const char * get_macro_name(MACRO_STR_T* table, int id) 
  19. int i = 0; 
  20. while(table[i].id != -1 && table[i].name != NULL){ 
  21. if(table[i].id == id) 
  22. return table[i].name; 
  23.         i++; 
  24.     } 
  25. return ""; 
  26. static const char * get_color_name(COLOR color) 
  27. return get_macro_name(g_color_str, color); 
  28. int main() 
  29.     COLOR color = RED; 
  30.     printf("The name of color %d is '%s'. \n", color, get_color_name(color)); 
  31. return 0; 

最新文章

  1. Android笔记——Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
  2. linux常用命令-文件处理命令
  3. HTTPS 协议和原理
  4. 用mac的terminal通过公私钥和ssh登录Linux
  5. Haskell 笔记 ②
  6. TestLink学习八:TestLink1.9.13与Mantis1.2.19集成
  7. WiFi入口流量O2O微应用平台
  8. glyphicons-halflings-regular.ttf 404
  9. URL方式访问Hadoop的内容
  10. 关于Cococs中的CCActionEase(中)
  11. Hibernate 关联关系映射实例
  12. IOS设计模式学习(20)命令
  13. android之【本地通知Notification】
  14. spring的Java配置入门(Spring Boot学习笔记之一)
  15. python注释方法以及编码问题
  16. 基础进阶(一)之HashMap实现原理分析
  17. MySQL数据库、表常用操作
  18. centos安装谷歌浏览器
  19. Linux知识扩展二:lsof命令
  20. day14 Python集合的补充

热门文章

  1. git push 提示
  2. css虚线和css双实线
  3. UVALive 4043 Ants(二分图完美匹配)
  4. Run busybox httpd with php, sqlite
  5. LeetCode Reverse Linked List (反置链表)
  6. Java [Leetcode 338]Counting Bits
  7. 开发ffmpeg/live555常见问题错误及解决方法
  8. Darwin Streaming Server 安裝操作備忘
  9. Oracle中获取执行计划的几种方法分析
  10. win下Java环境安装