Chinaunix首页 | 论坛 | 博客
  • 博客访问: 242900
  • 博文数量: 253
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-21 12:29
文章分类

全部博文(253)

文章存档

2014年(253)

我的朋友

分类: C/C++

2014-09-21 12:53:29

原文地址:C语言##和#的使用 作者:andyhzw

操作系统:ubuntu10.04

前言:
    在开发偏大型的项目中,基本上都要使用到##和#。

一,含义
    a,#  -> 将宏定义的变量转化为字符串
    b,##-> 将其前后的两个宏定义中的两个变量无缝拼接在一起

二,使用实例

点击(此处)折叠或打开

  1. /*
  2.  * 测试command架构
  3.  */


  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <unistd.h>


  8. struct cmd_tbl_s 
  9. {
  10.     char        *name;        /* Command Name            */
  11.     int        maxargs;    /* maximum number of arguments    */
  12.     int        repeatable;    /* autorepeat allowed?        */
  13.                             /* Implementation function    */
  14.     int        (*cmd)(struct cmd_tbl_s *, int, int, char *[]);
  15.     char        *usage;        /* Usage message    (short)    */
  16.     char        *help;        /* Help message    (long)    */
  17. };
  18. typedef struct cmd_tbl_s    cmd_tbl_t;


  19. #define    CMD_MAX_COUNT        10


  20. static     cmd_tbl_t     cmd_set[CMD_MAX_COUNT] ;
  21. static    int             cmd_count    = 0;


  22. #define    SR_CMD(name,maxargs,rep,cmd,usage,help) \
  23.     {cmd_tbl_t __sr_cmd_##name = {#name,maxargs,rep,cmd,usage,help};\
  24.         cmd_set[cmd_count++] = __sr_cmd_##name;}


  25. static int do_test(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
  26. {
  27.     int     index = 0;    

  28.     for(index = 1; index < argc; index++)
  29.     {        
  30.         if(strcmp(argv[index],"--usage") == 0)
  31.         {
  32.             printf("%s usage: %s\n",cmdtp->name,cmdtp->usage);
  33.         }
  34.         else if(strcmp(argv[index],"--help") == 0)
  35.         {
  36.             printf("%s help: %s\n",cmdtp->name,cmdtp->help);
  37.         }
  38.         else
  39.         {
  40.             printf("error argv :%d, %s\n",index,argv[index]);
  41.         }
  42.     }
  43.     return 0;
  44. }


  45. void    init(void)
  46. {
  47. SR_CMD(test,
  48.         2,
  49.         0,
  50.         do_test,
  51.         "just test",
  52.         "test command arch")
  53. }



  54. int main(int argc,char *argv[])
  55. {
  56.     int             index = 0;

  57.     init();

  58.     for(index = 0; index < cmd_count; index++)
  59.     {
  60.         cmd_set[index].cmd(&cmd_set[index],0,argc,argv);
  61.     }

  62.     return 0;
  63. }
    实验结果:
    



阅读(146) | 评论(0) | 转发(0) |
0

上一篇:C语言typeof详解

下一篇:C语言Printf格式

给主人留下些什么吧!~~