LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1773|回复: 4

在linux里定义的问题,vc里可以,在gcc里有警告

[复制链接]
发表于 2007-10-21 18:25:42 | 显示全部楼层 |阅读模式
#if !defined(NDEBUG)
        #define DEBUGP DoDbgPrtStr
#else
        #define DEBUGP
#endif

// 这个函数只是为调试的时候用的,希望用宏定义的方式,在正式发布程序时候能够完全优化掉这部分程序
void
DoDbgPrtStr(const TCHAR * fmt, ...)
{
#if !defined(NDEBUG)
        va_list valist;
        va_start(valist, fmt);
        vfprintf(stderr, fmt, valist);
        va_end(valist);
#endif
}

int main()
{
        int i;
        int a = 11;
        int b = 22;
        b = a + b;

        DEBUGP("a+b=%d\n", b);   // 我希望在有NDEBUG定义的时候输出信息,在没有定义时候,不输出信息,现在取消输出时候有警告信息


        return 0;
}

main.c:16: warning: left-hand operand of comma expression has no effect
main.c:16: warning: statement with no effect
我这种情况如何解决呢?不知道描述清楚没有
发表于 2007-10-21 22:00:46 | 显示全部楼层

  1. #if !defined(NDEBUG)
  2. #define DEBUGP DoDbgPrtStr
  3. #else
  4. #define DEBUGP(x...)
  5. #endif
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-22 10:00:37 | 显示全部楼层
Post by remote fish

  1. #if !defined(NDEBUG)
  2. #define DEBUGP DoDbgPrtStr
  3. #else
  4. #define DEBUGP(x...)
  5. #endif
复制代码



谢谢楼上,这样好像vc里不能编译通过,gcc可以了
回复 支持 反对

使用道具 举报

发表于 2007-10-22 10:58:56 | 显示全部楼层
照你最初的写法, 按理说  VC 也应改给出警告的.

那现在只有用笨办法了,

#ifdef WIN32
#define DEBUGP
#else
#define DEBUGP(x...)
#endif
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-22 12:19:11 | 显示全部楼层
是这样的,解决了!:)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表