C++ concatenation in macro



我有以下一组宏(我从如何在字符串中使用编译时间常量__LINE__的第一个答案中得到的?)定义在尝试有一个宏'LOCATION_PREFIX',我可以使用它来"捕获"一行代码的位置(将传递给将执行日志记录的其他函数)。

#define STRINGIZE(f,l) STRINGIZE2(f) "(" STRINGIZE2(l)"):"
#define STRINGIZE2(x) #x
#define LOCATION_PREFIX STRINGIZE(__FILE__, __LINE__)
int main(){
printf("%s heren", LOCATION_PREFIX);
printf("%s over heren", LOCATION_PREFIX);
return 1;
}
输出:

" t.cpp "(8):这里
" t.p p"(9): over here

我希望输出是:

t.cpp (8):
T.cpp (9): over here

您不需要第一个STRINGIZE2调用,因为文件名已经是一个引号字符串:

#define STRINGIZE(f,l) f "(" STRINGIZE2(l) "):"
#define STRINGIZE2(x) #x
#define LOCATION_PREFIX STRINGIZE(__FILE__, __LINE__)
int main(){
  printf("%s heren", LOCATION_PREFIX);
  printf("%s over heren", LOCATION_PREFIX);
  return 1;
}