In Lua 5.3 Tabelle verwandte Funktionen in der C-API empfangen und zurück lua_Integer
.lua_Integer und lua_createtable (Tabelle Größenbeschränkung)
void lua_rawgeti (lua_State *L, int idx, lua_Integer n);
void lua_rawseti (lua_State *L, int idx, lua_Integer n);
lua_Integer luaL_len (lua_State *L, int index);
Aber lua_createtable
erhält noch int
.
void lua_createtable (lua_State *L, int narr, int nrec);
Im Beispiel Funktion unter der Länge der Quelltabelle wird verwendet, um eine Kopie zu erstellen, welche die gleiche Größe.
static int copy_sequence(lua_State *L) {
lua_Integer len, i;
luaL_checktype(L, 1, LUA_TTABLE);
len = luaL_len(L, 1);
lua_createtable(L, (int)len, 0); /* conversion warning */
for (i = 1; i <= len; i++) {
lua_rawgeti(L, 1, i);
lua_rawseti(L, -2, i);
}
return 1;
}
Aber ein gegossenes erforderlich, um die Warnung zum Schweigen zu bringen:
Warnung: Umstellung auf 'int' von 'lua_Integer' kann seinen Wert [-Wconversion]
Suche verändern Auf der Lua-Mailingliste habe ich folgende thread gefunden, die über Lua 5.2 ist (gilt auch für frühere Versionen):
Zitat: Roberto Ierusalimschy (7 Aug 2012)
Die Größe der Tabellen ist bereits auf 2147483647 Elemente beschränkt. Lua verwendet intern 'int', um alle seine Arrays zu indizieren (außer Strings/Byte Arrays). Es ist ein Schmerz, mit unsigned Werten (wie size_t) überall zu arbeiten; ptrdiff_t hat keinerlei Garantien.
Ist dies immer noch der Fall für Lua 5.3 die long long
für lua_Integer
verwendet? Ist die Besetzung int
von lua_Integer
wie im obigen Beispiel sicher in Lua 5.3?
Diese Frage scheint für die Lua-Mailingliste besser geeignet zu sein. – lhf