• c语言中宏定义#和 ##的作用:


    转载:http://www.cnblogs.com/cyttina/archive/2013/05/11/3072969.html

    看了这篇文章后了解了,但是文章中的例子比较特别,我在这里加个注释好了。

    http://www.cnblogs.com/welkinwalker/archive/2012/03/30/2424844.html


    单井号就是将后面的 宏参数 进行字符串操作,就是将后面的参数用双引号引起来

    双井号就是用于连接。

    比如文章中的例子:

    #define PRINT(NAME) printf("token"#NAME"=%d ", token##NAME)

    调用时候使用: PRINT(9);
    宏展开即为: printf("token"#9"=%d ",token##9);
    #9即为"9",token##9即为: token9
    整个为: printf("token""9""=%d ",token9);
    之前定义过token9为9,所以就是输出 token9=9;


    解释到这里应该就明白单#和双#怎么用了。附上代码,还是摘自上面的连接。

     1 #include <iostream>
     2 void quit_command(){
     3     printf("I am quit command
    ");
     4 }   
     5 void help_command(){
     6     printf("I am help command
    ");
     7 }   
     8 struct command
     9 {
    10     char * name;
    11     void (*function) (void);
    12 };  
    13 #define COMMAND(NAME) {#NAME,NAME##_command}
    14 #define PRINT(NAME) printf("token"#NAME"=%d
    ", token##NAME)
    15 main(){
    16     int token9=9;
    17     PRINT(9);
    18     struct command commands[] = {
    19         COMMAND(quit),
    20         COMMAND(help),
    21     };  
    22     commands[0].function();
    23 }

    代码中还有一点就是调用那个函数指针的部分。解释一下,COMMAND宏定义是有{}的,第一个#NAME,就是赋值给结构体command的char *name,第二个 NAME##_command,用来拼出函数名,赋值给结构体中的函数指针,之后在commands[0].function()中通过函数指针来调用函数。

  • 相关阅读:
    面向对象的六大原则
    系统整体框架介绍
    键盘控制div上下左右移动 (转)
    逆向wireshark学习SSL协议算法(转)
    在CentOS下安装配置MySQL(转)
    ps 专题
    用Linux/Unix命令把十六进制转换成十进制(转)
    2014由于在myeclipse5.5.1许可证
    美国地名索引(在美国的英文名市、中国)
    Memcache存储大量数据的问题
  • 原文地址:https://www.cnblogs.com/3me-linux/p/5825940.html
Copyright © 2020-2023  润新知