2008年三月月 发布的文章

装修博弈·主材选购

现在,一般家庭装修多数采用半包的方式,也就是装修公司出人、出辅料(水泥、沙子、油漆、木料等),自己买主材,如地板、磁砖等。虽说半包的模式已经将最麻烦、最牵扯精力、最技术相关的装修工作交给了装修公司去打理,但主材选购也扔是足够令人头疼的。

装修绝对是一项系统工程,而且是一件很"庞大"的系统工程,如果你能将每个细节都搞得清楚的话,那我真的要对你说声"佩服"了。我自己是没时间、没耐心也没那个热情去学习,要知道关于材料选购的知识,网上那是"多如牛毛",即使搞懂"地板"这一种主材也足够让你头疼的,你要了解地板的种类、工艺、品牌、价位以及很多影响地板品质的细节知识,而且了解某种主材还不能全凭网络上的一家之言,还要亲身到装饰建材市场去调查,去研究,一趟走来又费工夫、又费体力,有时候还达不到预期效果,甚至有时还因与某些卖家沟通不畅而惹得一肚子气。

掐指算来,选购主材的"活儿"已经占用我三个周末的休息时间了,周末两天每天都早起晚归-搜街。装修之初大家都有这样的期望:买到物美价廉的商品。正是由于这样的"念头",我们才从一个商场逛到另一个商场,总希望碰到"天上掉馅饼"的机会,但往往的结果都是"看得多了、心烦了、意乱了,选择也就开始随便了"。所以事先做好选购定位是很关键的,这也是亲身体验后的一些总结。

选择"门当户对"的主材
装修前大家或多或少都会掂量一下自己的"钱袋",了解一下自己的购买力,这时千万不要做乐观打算,最好能实事求是,将选购的主材对象锁定在与自己"财力"相符的层次上。装修材料和其他商品都是类似的,也有高中低档之分,选定一个粗线条的范围后,在进一步细化,直至选到合适的商品。

价格趋同,在大型家居广场或超市选购更有保障
逛了这就长时间的建材市场,发现同一品牌、同一型号的材料无论在专卖店还是在大型商场、超市价格和活动都是相同的。或者说现在在某一个城市,都是一个代理商在做同一个品牌,各个门店的价格逐渐趋同,在这样的情况下去大型Mall去购买材料反倒更具保障,一般的大型商场如居然之家红星美凯龙百安居东方家园等,都是有自己的保障体系的,同样的商品你会得到商家和商场的双重保障,而且有些时候,商场凭借其影响力还能拿到更低的折扣价,在售后服务方面做得也比一般的专卖店要好,在这样的地方购物,图的就是放心。比如今天我在东方家园买的瓷砖,在其他店面是有偿送货上楼的,而东方家园则是无偿,单价还比其他地方要低上一些;上周在居然之家买的地板的价格也和其他门店一样,而且还可以刷卡积分,这样的消费还是很痛快的。

不要回避"活动"
中国的国情是这样的:不活动不买东西。有些时候"活动"的确能给消费者带来一些"实惠",当然这需要你事先了解到你要选购商品在市场上的行情,这样你才能对比出来商场的活动到底掺了多少水分。有些时候,商场的确是凭着其强大的实力来做活动的,价格就是比其他地方低,东西还是同样的东西,在商场活动期间购买,何乐而不为呢。就拿今天买的瓷砖来说,我都在不下三个地方看了多次了,都是一样的价,东方家园给无偿送货上楼、还有相当额度的赠券,我当然在这里买了。用这些可观的券我还拿下了方太一款偏高档的烟机和最新推出的五腔驱动燃气灶。当然了,如果你是专家,你懂得内幕,那就另当别论了。其实当专家也是很难的,什么都知道,什么对他都透明,他自己如果装修的话,那采购起东西来也是相当闹心的。

太晚了,不写了,希望那些即将要开始选购主材的朋友们都能选购到真正"物美价廉"的商品。

多行宏定义中的注释问题

早上在写代码时遇到这样一个问题:即如何在一个拥有多行的宏定义中做注释?,这里把方法演化的过程贴出来,可能对某些朋友有些借鉴意义。

宏定义高深莫测,而且是比较细节的东西,详细说明请参见"C参考手册"之类的书籍。

在我的代码中,我大致要做这样一个简单的事情:printf("%s%s%s\n", "hello", "macro", "yeah!"); "%s%s%s\n"这个字符串中每一项输出都有一定的含义,而且在真实代码里,这个串中的输出项可不止3个,所以一个直接的想法就是将其定义为一个宏。

#define STR_OUTPUT_FORMAT_V0  "%s%s%s\n"
printf(STR_OUTPUT_FORMAT_V0, "hello ", "macro, ", "yeah!");
程序输出:hello macro, yeah!

由于真实代码中这个串很长,所以打算美化一下格式,定义成下面的样子:
#define STR_OUTPUT_FORMAT_V1  "%s\
                               %s\
                               %s\n"
printf(STR_OUTPUT_FORMAT_V1, "hello ", "macro, ", "yeah!");
程序输出:hello                                macro,                                yeah!

这样的定义显然不对,也在我意料之中,续行符将空格也续到格式串中了,导致输出的结果中带有大量空格。

改进一下,利用C语言的字符串自动连接语法。
#define STR_OUTPUT_FORMAT_V2  "%s"\
                              "%s"\
                              "%s\n"
printf(STR_OUTPUT_FORMAT_V2, "hello ", "macro, ", "yeah!");
程序输出:hello macro, yeah!

现在的问题是如何在这样一个多行的宏定义里加入注释,字段含义特殊,加上注释有利于以后维护以及别人阅读你的代码,否则一堆%s%s,让人看了就头痛。先这么加试试:
#define STR_OUTPUT_FORMAT_E1  "%s"\   /* comment1 */
                              "%s"\   /* comment2 */
                              "%s\n"  /* comment3 */
printf(STR_OUTPUT_FORMAT_E1, "hello ", "macro, ", "yeah!");
我们得到的结果:编译错误。
通过gcc -E 选项我们看到,宏替换后的代码:
                              "%s"\
                              "%s\n"
int main() {
        printf("%s"\, "hello ", "macro, ", "yeah!");
}

由于没有续行符在注释前面,所以宏定义的后两行实际上并没有被包含在宏定义中,就像没有暂住证的人一样,被GCC这个"警察"逮个正着。

继续改进:
#define STR_OUTPUT_FORMAT_V3  "%s"   /* comment1 */ \
                              "%s"   /* comment2 */ \
                              "%s\n"  /* comment3 */
printf(STR_OUTPUT_FORMAT_V3, "hello ", "macro, ", "yeah!");
程序输出:hello macro, yeah!
显然预编译器忽略宏定义中的注释以及空格,STR_OUTPUT_FORMAT_V3就完全符合我的要求了。

当然,很多人不建议使用宏,特别是C++的Fans,宏也的确有很多弊端,这里也有替代方法:
const char *str_output_format = "%s"    /* comment1 */
                                 "%s"    /* comment2 */
                                 "%s\n"; /* comment3 */
printf(str_output_format, "hello ", "macro, ", "yeah!");
程序输出:hello macro, yeah!

用一个字符串变量代替格式宏,还可以避免上述由于在宏中做注释带来的一系列问题。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats