[英]C++ macros and 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()
{
//works fine
MESSAGE_A("Test");
//invalid
a::MESSAGE_A("Test")
return 0;
}
什么是在宏中使用命名空間對象的正確變體。
宏由預處理器處理,預處理器對命名空間一無所知。 所以宏不是命名空間,它們只是文本替換。 由於它們總是污染全局命名空間,因此不鼓勵使用宏。
如果您需要打印一條消息,並且需要將其命名為命名空間,只需使用內聯函數即可。 代碼看起來很簡單,可以正確內聯:
namespace a
{
inline void MESSAGE_A(const char* message)
{
std::cout << message << std::endl;
}
}
不起作用。 宏對名稱空間一無所知。 如果要使用名稱空間 - 則不得使用宏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.