我尝试在命名空间内使用宏进行日志记录以获取文件名和行号。 这是生成错误的代码的简化版本。
#include <iostream>
using namespace std;
namespace A
{
#define MACRO(a) \
do { \ //error: expected unqualified-id before 'do'
B::func() \
} while(0)
class B
{
public:
static void func(){cout << "called from MACRO\n";}
};
}
int main() {
A::MACRO("something"); //note: in expansion of macro ‘MACRO’
return 0;
}
我还尝试使用另一种格式定义宏,例如
#define MACRO(message) \
( \
{ \
B::func() \
} \
)
但同样的错误。这是link一个最小的工作示例。
This让我想到以这种方式使用宏。但在这个问题中没有使用任何类,正如我提到的,这是我想要实现的目标的简化版本。
最佳答案
宏是一个预处理概念。预处理器没有命名空间的概念。
您可以在命名空间内定义宏,但您将使用非限定名称:
namespace n {
#define MACRO(x)
}
int main()
{
MACRO("something");
}
关于c++ - 命名空间内的宏在 'do' 错误之前给出预期的 unqualified-id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47476129/