lua源码问题,"" s的用法

最近我在学习Lua源码。我对于"" s在luaS_newlstr(L, "" s, (sizeof(s)/sizeof(char))-1)中的用法感到困惑。

#define luaS_newliteral(L, s)   (luaS_newlstr(L, "" s, (sizeof(s)/sizeof(char))-1))

TString *luaS_newlstr (lua_State *L, const char *str, size_t l) {
  if (l <= LUAI_MAXSHORTLEN)  /* 短字符串? */
    return internshrstr(L, str, l);
  else {
    TString *ts;
    if (unlikely(l >= (MAX_SIZE - sizeof(TString))/sizeof(char)))
      luaM_toobig(L);
    ts = luaS_createlngstrobj(L, l);
    memcpy(getstr(ts), str, l * sizeof(char));
    return ts;
  }
}
点赞
用户7509065
用户7509065

在 C 中,将字符串字面量放在一起,它们将被连接起来,因此"foo" "bar" "baz"等同于"foobarbaz",但将字符串字面量与任何其他东西放在一起(例如"foo"str)将导致编译错误。通过在宏中使用"" s,它们确保宏仅在s是字符串字面量时起作用,而不是变量或其他东西。

2021-04-19 02:46:37