我试图在命名空间中使用宏来记录目的,以获取文件名和亚麻布。 以下是生成错误的代码的简化版本。
#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让我想到以这种方式使用宏。但是在那个问题中没有使用任何课程,正如我所提到的,这是我想要实现的简化版本。
答案 0 :(得分:1)
宏是一种预处理概念。预处理器没有命名空间的概念。
您可以在命名空间内定义宏,但是您将使用非限定名称:
namespace n {
#define MACRO(x)
}
int main()
{
MACRO("something");
}