C macro裡的#x
C macro裡的#x
在TensorRT/parsers/caffe/caffeMacros.h
中的macro CHECK_NULL_RET_VAL
裡:
#define CHECK_NULL_RET_VAL(ptr, val) \
if ((ptr) == nullptr) \
{ \
std::cout << "Error: input " << #ptr << " is NULL in " << FN_NAME << std::endl; \
return val; \
}
用到了#ptr
。#ptr
在處理過後,會變成"macro函數的引數名",如下例:
#define CHECK_NULL_RET_VAL(ptr, val) \
if ((ptr) == nullptr) \
{ \
std::cout << "Error: input " << #ptr << " is NULL in " << FN_NAME << std::endl; \
return val; \
}
int main(){
int* p = nullptr;
CHECK_NULL_RET_VAL(p, 0)
return 0;
}
程序的運行結果為:
Error: input p is NULL in main
我們可以看到#ptr
被解析成p
,也就是CHECK_NULL_RET_VAL
的引數的名稱。
完整代碼放在:cpp-code-snippets/macro_pound.cpp。