【发布时间】:2017-09-30 19:51:32
【问题描述】:
在 zflog 库中我看到了这段代码
static char* lvl_char(const int lvl)
{
switch (lvl)
{
case ZF_LOG_VERBOSE:
return "VERBOSE\0";
case ZF_LOG_DEBUG:
return "DEBUG\0";
case ZF_LOG_INFO:
return "INFO\0";
case ZF_LOG_WARN:
return "WARN\0";
case ZF_LOG_ERROR:
return "ERROR\0";
case ZF_LOG_FATAL:
return "FATAL\0";
default:
ASSERT_UNREACHABLE("Bad log level");
return "?\0";
}
}
这对我来说似乎很奇怪。我们真的可以从静态函数中返回一个本地 c 字符串吗?
【问题讨论】:
-
This 可能有助于理解变量的分配位置。它是在考虑微控制器的情况下编写的,但普遍适用。 (除非在您没有真正 ROM 的 PC 上。)
-
"VERBOSE\0"很奇怪。只需"VERBOSE"通常就足够了,因为当编译器为字符串分配空间时,它包含一个 NUL 终止字符。 (除非调用者出于某种疯狂的原因需要 2 个 NUL)。
标签: c string return string-literals storage-duration