首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 为什么要用“((”取代“(”?
【标  题】:为什么要用“((”取代“(”?
【关键字】:
【来  源】:http://www.cppblog.com/huyi/archive/2006/10/13/13637.html

为什么要用“((”取代“(”?

在做日志接口的时候,真实的接口函数应该是如下样式的:
__static_logger__.log(int level,const char* fmt, ...);
这里使用了printf类似的技术:可变参数。
这个技术可以动态的替换字符串fmt中的内容。
同时,这个方法可能会被重载,用于不需要可变参数的情况:
__static_logger__.log(int level,const char* fmt);

通常,我们还会定义一些辅助用的宏:
#define KLOG(X) \
??? do { \
??????? KDBG::printf X; \
??? } while (0)

使用的时候,必须按照下面的格式:
KLOG((LM_ERROR, "%s\n", strerror(errno)));
注意,使用了双层的括号“((”

为什么不把宏改成:
#define KLOG(X,Y,...) \
??? do { \
??????? KDBG::log(X,Y,__VA_ARGS__); \
??? } while (0)s
从而按如下的“标准形式”来使用LOG呢?
KLOG(LM_ERROR, "%s\n", strerror(errno));


答案是宏不能像函数那样重载,KLOG宏只能有一个,就是最后定义的那个,也就是能接受的参数个数是固定的。

工具栏插件设计:【上一篇】
HDR粗解补充——眼睛适应性:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 转 2003 IIS6 ASP http 500 - 内部服务器错误 请求的资源在使用中
  • global statics的地址也可以当成编译期常量
  • 能生成这个类的一个对象嘛???
  • 数据挖掘在商业应用上的一个完整的流程
  • Tru64 如何支持telnet到小机
  • MsAjax Lib-> Array.insert 函数
  • 我短暂的黑客生涯——No小说
  • NAT路由的穿透连接
  • 微软新一代操作系统Windows Vista
  • 一个非常简单的题
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.