当前位置:C++技术网 > 资讯 > 拼接两个宏字符串组成一个新字符串宏

拼接两个宏字符串组成一个新字符串宏

更新时间:2018-10-11 17:32:30浏览次数:1+次

    在定义一个URL地址时,我们可能出现这样的两组:
http://www.cjjjs.com/user/1.txt
http://test.www.cjjjs.com/user/1.txt
    出现这个场景的需求是,我们开发的程序,测试时放在测试服务器上运行,最终发布则放在正式服务器运行。而对于请求的路径,则会根据地址而不同。所以我们这里就需要定义两个地址。
    如果用变量,这是非常简单的事情,也就是两个字符串而已。不管怎么处理,都再简单不过了。如果我们想简化这两个定义,我们可以将前面的部分提取出来,后面共用一个变量,这样看起来简洁。如下:
string url1 = "http://www.cjjjs.com"
string url2 = "http://test.www.cjjjs.com"
string url3 = "/user/1.txt"
string url4 = url1 + url3
string url5 = url2 + url3
    然后我们自行组合就可以了。不过我们需要将这两个用法使用宏来代替实现。试想一下,如何实现?
    直接想到的就是:
#define URL1  "http://www.cjjjs.com/user/1.txt"
#define URL2  "http://test.www.cjjjs.com/user/1.txt"
    如果将前面部分提取出来,这样:
#define URL1  "http://www.cjjjs.com"
#define URL2  "http://test.www.cjjjs.com"
#define URL3  "/user/1.txt"
    组合:?
#define URL4  URL1 + URL3
#define URL5  URL2 + URL3
    这是不对的!不管是在Windows还是Linux环境,编译都是通不过的。因为两个常量是不能直接相加的。这是我们自己想当然了。
    所以我们需要的宏字符串拼接就是我们现在需要的。网上感觉没有直接说这个事的,因为用宏用的少,所以竟然不知道。查了半天资料,摸索出来了。
    想要实现宏字符的拼接,其实只要把上面的加号去掉就行了。在VS2017的Windows环境测试通过,CentOS6.8 GCC测试也通过了。
    ok!!搞定。