C lua源代码问题,使用&引用;s
这些天我在学习lua的源代码。我对luaS_newlstr(L),“s,(sizeof(s)/sizeof(char))-1中“s”的用法感到困惑 定义luaS_newliteral(L,s)(luaS_newlstr(L),“s,(sizeof(s)/sizeof(char))-1)) TString*luaS\u newlstr(lua\u State*L,const char*str,size\u t L){ if(l=(MAX_SIZE-sizeof(TString))/sizeof(char))) 卢阿穆图比格(L); ts=luaS_createlngstrobj(L,L); memcpy(getstr(ts),str,l*sizeof(char)); 返回ts; } }C lua源代码问题,使用&引用;s,c,lua,C,Lua,这些天我在学习lua的源代码。我对luaS_newlstr(L),“s,(sizeof(s)/sizeof(char))-1中“s”的用法感到困惑 定义luaS_newliteral(L,s)(luaS_newlstr(L),“s,(sizeof(s)/sizeof(char))-1)) TString*luaS\u newlstr(lua\u State*L,const char*str,size\u t L){ if(l=(MAX_SIZE-sizeof(TString))/sizeof(c
在C语言中,仅仅将字符串文本放在一起就可以将它们连接起来,因此
“foo”“bar”“baz”
相当于“foobarbaz”
,但是将字符串文本放在任何其他文本旁边,如“foo”str
,是一个编译器错误。通过在宏中执行“s
,他们确保宏仅在s
是字符串文字而不是变量或其他东西时才起作用。在C中,只需将字符串文字彼此相邻即可将它们连接起来,因此“foo”“bar”“baz”
相当于“foobarbaz”
,但是,将字符串文本放在任何其他文本旁边,例如“foo”str
,是一个编译器错误。通过在宏中执行“s
,他们确保宏仅在s
是字符串文字而不是变量或其他东西时才工作。我知道了,谢谢,:)我知道了,谢谢,:)
#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) /* short string? */
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;
}
}