关于宏定义中的#与##

先看代码:

#include <iostream>

#define display1(name) std::cout<<#name<<std::endl
#define display2(name) std::cout<<"#name"<<std::endl
#define display3(name) std::cout<<""#name""<<std::endl

void test_command(char* content){std::cout<<content<<std::endl;}
void help_command(char* content){std::cout<<content<<std::endl;};

struct Command {

    char *name;

    void (*function)(char*);

};

#define COMMAND(NAME) { #NAME, NAME##_command }


int main() {

    display1("name1");
    display1(name1);

    display2("name2");
    display2(name2);

    display3("name3");
    display3(name3);

    struct Command commands[] = {COMMAND(test),COMMAND(help)};

    for (auto item:commands) {
        item.function(item.name);
    }

    return 0;
}

执行结果:

"name1"
name1
#name
#name
"name3"
name3
test
help

1.#的功能是将其后面的宏参数进行字符串化操作
2.## 被称为连接符

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容