加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

不能在C中使用宏

发布时间:2020-12-16 10:11:59 所属栏目:百科 来源:网络整理
导读:我正在尝试使用GNU在 Linux上的Eclipse CDT中构建以下代码: log_defs.h #pragma once#define dbg_log(fmt,...) debug_logger::debug(__FILE__,__FUNCTION__,__LINE__,fmt,__VA_ARGS__,0) ErrorMessage.cpp ErrorMessage::ErrorMessage( void ){ dbg_log( L"
我正在尝试使用GNU在 Linux上的Eclipse CDT中构建以下代码:

log_defs.h

#pragma once

#define dbg_log(fmt,...) debug_logger::debug(__FILE__,__FUNCTION__,__LINE__,fmt,__VA_ARGS__,0)

ErrorMessage.cpp

ErrorMessage::ErrorMessage( void ){ dbg_log( L"ErrorMessage::ErrorMessage _in" ); }

ErrorMessage::~ErrorMessage( void ){ dbg_log( L"ErrorMessage::~ErrorMessage _in" ); }

我收到以下错误:

../sources/ErrorMessage.cpp: In constructor ‘ErrorMessage::ErrorMessage()’:
/include/log_defs.h:27:97: error: expected primary-expression before ‘,’ token
 #define dbg_log(fmt,0)
                                                                                             ^
../sources/ErrorMessage.cpp:150:37: note: in expansion of macro ‘dbg_log’
 ErrorMessage::ErrorMessage( void ){ dbg_log( L"ErrorMessage::ErrorMessage _in" ); }
                                 ^
../sources/ErrorMessage.cpp: In destructor ‘ErrorMessage::~ErrorMessage()’:
/include/log_defs.h:27:97: error: expected primary-expression before ‘,0)
                                                                                             ^
../sources/ErrorMessage.cpp:152:38: note: in expansion of macro ‘dbg_log’
 ErrorMessage::~ErrorMessage( void ){ dbg_log( L"ErrorMessage::~ErrorMessage _in" ); }

解决方法

原因是当您没有向宏传递任何其他参数时,__ VA_ARGS__会扩展为空.因此,在宏扩展之后,您最终会得到以下代码:

debug_logger::debug("SomeFile","SomeFunction",42,L"TheFormatString",0)

如果您忠实发布的代码捕获了您的真实场景,那么解决方法很简单:将fmt包含在可变参数部分中:

#define dbg_log(...) debug_logger::debug(__FILE__,0)

这样,你总是将至少一个参数(fmt字符串)传递给宏,逗号将很好地运行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读