2015-01-11 17 views
5

Trong các hàm liên quan đến bảng Lua 5.3 trong API C nhận và trả lại lua_Integer.lua_Integer và lua_createtable (giới hạn kích thước bảng)

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); 

Nhưng, lua_createtable vẫn nhận được int.

void lua_createtable (lua_State *L, int narr, int nrec); 

Trong hàm mẫu dưới chiều dài của bảng nguồn được sử dụng để tạo bản sao có cùng kích thước.

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; 
} 

Nhưng, một dàn diễn viên được yêu cầu phải im lặng cảnh báo:

cảnh báo: chuyển đổi để 'int' từ 'lua_Integer' có thể thay đổi giá trị [-Wconversion]

Searching của nó trong danh sách gửi thư của Lua, tôi tìm thấy số thread sau đây về Lua 5.2 (áp dụng cho các phiên bản cũ hơn tôi giả định):

Trích dẫn: Roberto Ierusalimschy (7 Aug 2012)

Kích thước của bảng đã được giới hạn ở 2147483647 phần tử. Lua sử dụng nội bộ 'int' để lập chỉ mục tất cả các mảng của nó (trừ chuỗi/byte mảng). Đó là một nỗi đau để làm việc với các giá trị chưa ký (chẳng hạn như size_t) ở khắp mọi nơi; ptrdiff_t không có garanties nào cả.

Đây có phải là trường hợp của Lua 5.3 sử dụng long long cho lua_Integer không? Dàn diễn viên có phải là int từ lua_Integer như được sử dụng trong ví dụ trên an toàn trong Lúa 5.3 không?

+0

Câu hỏi này có vẻ phù hợp hơn với danh sách gửi thư của Lua. – lhf

Trả lời

5

Kích thước của bảng (số phần tử) vẫn được giới hạn ở 'int'. Điều đó không ngăn một bảng có các khóa lua_Integer tùy ý (miễn là vì bảng không phải là một trình tự thích hợp).

+2

Cảm ơn bạn đã dành thời gian trả lời câu hỏi này. Tôi đã thực sự viết một bài lên lua-l khi tôi nhìn thấy câu trả lời của bạn. – Adam

Các vấn đề liên quan