宏中的C ++连接

时间:2013-03-20 15:24:27

标签: c++ c-preprocessor stringification

我有一组宏(我从How can I use the compile time constant __LINE__ in a string?的第一个答案得到的),试图有一个宏“LOCATION_PREFIX”,我可以用它来“捕获”一行的位置代码(将传递给将执行日志记录的其他函数)。

#define STRINGIZE(f,l) STRINGIZE2(f) "(" STRINGIZE2(l)"):"
#define STRINGIZE2(x) #x
#define LOCATION_PREFIX STRINGIZE(__FILE__, __LINE__)

int main(){

printf("%s here\n", LOCATION_PREFIX);
printf("%s over here\n", LOCATION_PREFIX);

return 1;
}

输出:

  

“t.cpp”(8):这里是       “t.cpp”(9):在这里

我希望输出为:

  

t.cpp(8):这里是       t.cpp(9):在这里

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

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

#define STRINGIZE(f,l) f "(" STRINGIZE2(l) "):"
#define STRINGIZE2(x) #x
#define LOCATION_PREFIX STRINGIZE(__FILE__, __LINE__)

int main(){
  printf("%s here\n", LOCATION_PREFIX);
  printf("%s over here\n", LOCATION_PREFIX);

  return 1;
}