2015-05-18 4 views
7

दस्तावेज नहीं है I Lua का उपयोग मेरे (सी ++) गेम में स्क्रिप्टिंग भाषा के रूप में कर रहा हूं। एक कॉल (lua से ग ++) मैं जाँच किस प्रकार में ढेर के शीर्ष पर है:लुआ से बुलाए गए सी ++ में, lua_type (एल, 0) 9 लौटाता है जो

if(lua_type(L, (0)) == LUA_TSTRING) 

लेकिन कभी कभी lua_type (एल, (0)) रिटर्न 9.

मैं नहीं कर सकता ऐसा कोई प्रतीत होता है (वापसी मूल्य -1 और 8 या LUA_TNONE, LUA_TNIL, ... LUA_TTHREAD) के बीच होना चाहिए।

क्या हो रहा है?

+0

Ive lobject.h में निम्नलिखित मिला: '/ * गैर मूल्यों के लिए ** अतिरिक्त टैग */ #define LUA_TPROTO \t LUA_NUMTAGS #define LUA_TUPVAL \t (LUA_NUMTAGS +1) #define LUA_TDEADKEY \t (LUA_NUMTAGS + 2) ' जहां 'LUA_NUMTAGS' 9 –

उत्तर

5

ढेर के शीर्ष सूचकांक -1, नहीं है 0.

0 ढेर तक पहुँचने के लिए एक सूचकांक के रूप में इस्तेमाल नहीं किया जा सकता है:

(ध्यान दें कि 0 एक स्वीकार्य सूचकांक कभी नहीं है ।)

संदर्भ मैनुअल में §4.3 – Valid and Acceptable Indices में।

लुआ में सी एपीआई प्रोग्रामर का हाथ पकड़ नहीं करता है:

सबसे सी पुस्तकालयों में के रूप में, लुआ एपीआई कार्यों वैधता या स्थिरता के लिए अपने तर्क की जांच नहीं करते। हालांकि, आप लूआ को मैक्रो LUA_USE_APICHECK परिभाषित के साथ संकलित करके इस व्यवहार को बदल सकते हैं। [§4]

+1

है, फिर भी, प्रलेखन कहता है कि' LUA_TNONE' इसलिए परिणाम होना चाहिए, फिर भी 'LUA_TNONE' -1 है, 9 नहीं। यह हो सकता है कि वे इस परिदृश्य पर विचार करें (केवल "अवैध" इंडेक्स की बजाय अस्तित्व में नहीं) ताकि वह ई भी कवर न हो रस्सी का मामला, और इस तरह यह यूबी बन जाता है। हालांकि, यह सच है, तो खराब कोडिंग की तरह लगता है। –

+2

जबकि मैं मानता हूं कि यह अनिश्चित व्यवहार को मारने के बाद सटीक वापसी मूल्य की व्याख्या नहीं करता है, कुछ भी स्वीकार्य है और 'lua_type' स्पष्ट रूप से "स्वीकार्य इंडेक्स [ices]" या ("मान्य" या "गैर" के लिए परिभाषित किया गया है। -वालिद (लेकिन स्वीकार्य) इंडेक्स [ices] " –

+0

@ लाइटनेसरेसेसिन ऑर्बिट आपको एहसास है कि लुआ के मामले में" वे "वाले लोगों का समूह एक सेट है जिसमें lhf है, है ना? =) –

संबंधित मुद्दे