C++ 宏参数列表中的指针

C++ 宏参数列表中的指针,c++,c,macros,C++,C,Macros,我目前正试图根据编译器标志定义一个函数。如果设置了跟踪标志,那么我想定义一个宏来将信息传递给跟踪组件 #define TRACERPTR(Reporter * pReporter, traceComponent eComponent, traceLevel eLevel, string sFormat, formatArgs...) \ if (pReporter != NULL) { pReporter->trace(eComponent, eLevel, sFormat, ##form

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

#define TRACERPTR(Reporter * pReporter, traceComponent eComponent, traceLevel eLevel, string sFormat, formatArgs...) \
if (pReporter != NULL) { pReporter->trace(eComponent, eLevel, sFormat, ##formatArgs); }
Reporter是一个类,在同一个.h文件中定义,位于该宏上方。我需要传递一个reporter对象的指针,然后用它调用trace函数

但是,我得到一个编译器错误:

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

我很好奇,如果我只是删除了“*”——这会导致错误“宏参数必须以逗号分隔”


你知道我做错了什么吗?

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


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

只需在调用中放置
&
标记:

#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

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

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