宏参数列表中的指针

时间:2011-06-20 19:21:41

标签: c++ c macros

我目前正在尝试根据编译器标志定义一个函数。如果设置了TRACE标志,那么我想定义一个宏来将信息传递给跟踪组件。

#define TRACERPTR(Reporter * pReporter, traceComponent eComponent, traceLevel eLevel, string sFormat, formatArgs...) \
if (pReporter != NULL) { pReporter->trace(eComponent, eLevel, sFormat, ##formatArgs); }

Reporter是一个类,在同一个.h文件中定义,位于此宏之上。我需要传递一个记者对象的指针,然后用它来调用跟踪函数。

但是,我收到编译错误:

  

错误:“*”可能不会出现在宏中   参数列表

我很好奇如果我删除了“*”会发生什么 - 这会导致错误“宏参数必须以逗号分隔”。

知道我在这里做错了什么?

3 个答案:

答案 0 :(得分:9)

据我所知,在C中,至少没有输入宏参数。这都是符号替换。只需使用pReporter而不是Reporter * pReporterReporter pReporter

(我想这同样适用于你的宏的其他参数。)

答案 1 :(得分:3)

正如JAB所指出的,宏与函数不同,它们不需要参数类型

#define TRACERPTR(pReporter, eComponent, eLevel, sFormat, formatArgs...) \
if (pReporter != NULL) { pReporter->trace(eComponent, eLevel, sFormat, ##formatArgs); }

答案 2 :(得分:-1)

只需在通话中放置&标记:

#define SCAN_INT(str, myInt) (sscanf(str, "%d", myInt))

const char *myString = "23";
int myInteger;
SCAN_INT(myString, &myInteger);

或者您可以将其自动化,例如ncurses'getyx()

#define SCAN_INT(str, myInt) (sscanf(str, "%d", &myInt))

const char *myString = "23";
int myInteger;
SCAN_INT(myString, myInteger);

希望它有所帮助, ief2