簡體   English   中英

C ++宏和命名空間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM