宏定义中的#和##

来源:互联网 发布:骂淘宝客服歹毒的话 编辑:程序博客网 时间:2024/04/25 21:50

调试环境:win10+vs2015

在C和C++中#define是经常使用的,这里就介绍一下“#”和“##”
“#”:表示在宏定义中使用原字符串
“##”:表示连接前后两个字符串
这两个都只能用在#define中使用
举例

#define TEST(a,b) cout<<a<<" "<<#a<<" "<<b<<" "<<#b<<endlint main(){    TEST('c','d');    return 0;}

解析:将宏定义替换入主函数中,编译器将a看成一个c字符,而将#a看成‘c’字符串。
运行结果:c ‘c’ d ‘d’

#define SetGetPrama(type,value)\void Set##value(const type value){\    _##value=value;\}\type Get##value() {\    return _##value;\}class Test{public:    SetGetPrama(int,value);private:    int _value;};int main(){    Test t;    t.Setvalue(5);    int a=t.GetValue();    return 0;}

解析:该段代码的功能是生成类中私有变量对外部的接口,即生成set-get函数。
运行结果:可以在函数中创建该类的对象,可以直接调用set-get函数。

总结:宏定义代表着替换,有些时候我们可能需要只进行部分的替换。所以,可以使用“#”来改变其意义,不替换;有些时候我们需要在宏定义里面连接两个字符串,这个时候“##”就可可以派上用场了。

0 0
原创粉丝点击