C++ C++;宏和名称空间
我在名称空间中使用宏时遇到问题。 代码是C++ C++;宏和名称空间,c++,macros,namespaces,C++,Macros,Namespaces,我在名称空间中使用宏时遇到问题。 代码是 #include <iostream> namespace a { #define MESSAGE_A(message) \ std::cout << (message) << std::endl; } #define MESSAGE_A(message) \ std::cout << (message) << std::endl; int main() { //w
#include <iostream>
namespace a
{
#define MESSAGE_A(message) \
std::cout << (message) << std::endl;
}
#define MESSAGE_A(message) \
std::cout << (message) << std::endl;
int main()
{
//works fine
MESSAGE_A("Test");
//invalid
a::MESSAGE_A("Test")
return 0;
}
#包括
名称空间a
{
#定义消息(消息)\
std::cout它将不起作用。宏对名称空间一无所知。如果要使用名称空间,则不能使用宏。宏由预处理器处理,预处理器对名称空间一无所知。
因此,宏没有名称空间,它们只是文本替换。使用宏确实是不受鼓励的,因为它们总是污染全局名称空间
如果您需要打印消息,并且需要将其命名为命名空间,只需使用内联函数即可。代码似乎足够简单,可以正确内联:
namespace a
{
inline void MESSAGE_A(const char* message)
{
std::cout << message << std::endl;
}
}
名称空间a
{
内联无效消息(常量字符*消息)
{
std::cout可以帮助解决问题。在我的项目中,我必须在命名空间中使用宏,它们必须从另一个命名空间调用宏。@MaxFX,宏不是“调用”的,而是被替换的。如果你需要在过于复杂的事情上使用宏,那你就做错了。