宏参数列表中的指针
Pointer in macro parameter list
我目前正试图定义一个基于编译器标志的函数。如果设置了TRACE标志,那么我想定义一个宏来将信息传递给跟踪组件。
#define TRACERPTR(Reporter * pReporter, traceComponent eComponent, traceLevel eLevel, string sFormat, formatArgs...)
if (pReporter != NULL) { pReporter->trace(eComponent, eLevel, sFormat, ##formatArgs); }
Reporter是一个类,在同一个.h文件中定义,位于该宏之上。我需要传递一个报告对象的指针,然后用它来调用跟踪函数。
然而,我得到了一个编译器错误:
错误:"*"可能不会出现在宏中参数列表
我很好奇,如果我只是删除"*"会发生什么——这会导致错误"宏参数必须用逗号分隔"。
你知道我在这里做错了什么吗?
据我所知,至少在C中,宏参数是不类型化的。这都是符号替换。只需使用pReporter
而不是Reporter * pReporter
或Reporter pReporter
。
(我想,这同样适用于宏的其他参数。)
正如JAB所指出的,宏与函数不同,它们不需要参数类型
#define TRACERPTR(pReporter, eComponent, eLevel, sFormat, formatArgs...)
if (pReporter != NULL) { pReporter->trace(eComponent, eLevel, sFormat, ##formatArgs); }
只需在呼叫中放置&
标记:
#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
相关文章:
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 如何将共享指针列表传递到pybind11中的c++对象
- C++:如何初始化包含具有给定键的指针列表的映射
- 使用继承的指针列表复制构造函数或重载运算符=
- 我应该如何在工厂类中存储弱指针列表?
- Qt单元测试:指针列表上的QCOMPARE函数
- 如何正确释放要配对的指针列表?
- 如何在 c++ 上对指针列表进行排序
- 从地图复制到指针列表
- 我对C 中共享指针列表进行排序的功能未完成类型
- const_iterator引用的指针列表
- 在 c++ 中生成字符串到 std::指针列表的映射
- 访问链表中的结构(带有指向其子实现的指针列表的树)
- 有没有办法使用基于范围的迭代器来迭代对指针列表值的引用?
- 使用迭代器指针 (C++) 从对象指针列表中删除元素
- 无法列出定制类型的指针列表
- 创建指针列表的正确范例是什么
- 如何将指向指针列表的私有指针作为 const 返回
- C++填充指向指针**列表的指针,该列表指向指针地址