宏中的 C++ 连接

标签 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): here
"t.cpp"(9): over here

我希望输出为:

t.cpp(8): here
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 here\n", LOCATION_PREFIX);
  printf("%s over here\n", LOCATION_PREFIX);

  return 1;
}

关于宏中的 C++ 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15527721/

相关文章:

C 宏 - 如何将整数值转换为字符串文字

c++ - 定义宏后的哈希符号?

c - 访问具有相似名称的标识符的宏

c - 如何在 C 中使用字符串化在预处理器中执行计算

c++ - 没有虚拟继承的多重继承

c++ - message.pb.h 文件中的 Protobuf : Cannot open include file common. h

c++ - 如何计算结构的偏移量

c++ - 缺少方法: SXS and Controls.的奇怪案例在 "object doesn'中添加结果支持此属性或方法”?

c++ - 是否在扩展宏之前处理预处理器指令?

c - C/C++ 中的单行 #ifdef