gpt4 book ai didi

c++ - 如何在字符串中使用编译时常量 __LINE__?

转载 作者:IT老高 更新时间:2023-10-28 22:15:38 24 4
gpt4 key购买 nike

我可以将 __LINE__ 用作方法参数就好了,但我想要一种在使用字符串的函数中使用它的简单方法。

例如说我有这个:

11    string myTest()
12 {
13 if(!testCondition)
14 return logError("testcondition failed");
15 }

我希望函数的结果是:

"myTest line 14: testcondition failed"

如何写 logError?一定是宏的怪物吗?

最佳答案

为什么你甚至需要它作为一个字符串?整数有什么问题?以下是您可以编写 logError() 的两种方法:

#define logError(str) fprintf(stderr, "%s line %d: %s\n", __FILE__, __LINE__, str)

// Or, forward to a more powerful function
#define logError(str) logError2(__FILE__, __LINE__, str)
void logError2(const char *file, int line, const char *str);

如果您确实需要将行作为字符串,您可以使用字符串化操作符#,但由于宏的工作方式,您需要将其包装在两个宏中:

#define STRINGIZE(x) STRINGIZE2(x)
#define STRINGIZE2(x) #x
#define LINE_STRING STRINGIZE(__LINE__)

现在 LINE_STRING 是一个宏,它将扩展为一个包含当前行号的字符串,无论它在哪里扩展。如果你只有一层宏(即如果你有 #define STRINGIZE(x) #x),那么每次你都会得到文字字符串 "__LINE__"展开它,这不是你想要的。

关于c++ - 如何在字符串中使用编译时常量 __LINE__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2670816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com