為什么不受命名空間的限制?
宏處理在預處理階段,?預處理在編譯之前,編譯才進行語法分析,語義分析。命名空間也只能限制這部分。
在Json-RPC框架的實現中,遇到如下問題。一開始以為是在實現日志宏的時候,有其他原因造成不能使用,后面還是發現只是多一個換行符造成的錯誤。
首先宏定義不受C++中命名空間的限制。
宏定義,如果在有地方用到了宏定義,那么在預處理階段就會進行宏替換。
kimi的解釋如下:
好像找到了答案:
宏處理在預處理階段,?預處理在編譯之前,編譯才進行語法分析,語義分析。命名空間也只能限制這部分。
驗證代碼如下:(下面的日志宏也可以驗證)
//測試關于宏定義受不受命名空間影響
namespace AAA{#define multiply(a) (2*a)
}int main()
{std::cout<<multiply(2)<<std::endl;return 0;
}
這沒問題,可以正常訪問。
但是好像似乎不怎么規范,但是這個宏用于是當前命名空間的其他函數的調試,用于當前命名空間的其他部分好像還行。
日志宏的實現,用于調試代碼,定位錯誤。
namespace Json_RPC
{#define LOG(ragameter,...){\time_t t=time(NULL);\struct tm* local=localtime(&t);\char time_buffer[32]={0};\strftime(time_buffer,31,"%m-%d %T",local);\fprintf(stdout,"[%s][%s:%d]" ragameter "\n",time_buffer,__FILE__,__LINE__,##__VA_ARGS__);\}
}
我以為是warning,就沒注意。
然后一直抓著下面LOG的使用在看,一步一步驗證才發現是多加了一個續行符。