यहां कुछ कोड का एक संघीय संस्करण है जो एक रेंज चेक त्रुटि और ओवरफ्लो त्रुटि दोनों का कारण बनता है, क्या मुझे उन कंपाइलर चेक निर्देशों को चालू करना चाहिए। मैं समझता हूं कि यह सी 1 के गुणा पर एक अतिप्रवाह क्यों पैदा करेगा, ऐसा लगता है कि यह डेटा-प्रकार के अधिकतम मूल्यवान से अधिक हो सकता है। लेकिन यह एक रेंज-चेक त्रुटि क्यों ट्रिगर करेगा? डेल्फी के प्रलेखन और स्टैक ओवरफ़्लो पर अन्य पोस्ट इसे ध्वनि-जांच त्रुटियों की तरह ध्वनि बनाते हैं जो आम तौर पर सीमाओं से बाहर सरणी एक्सेस के लिए होते हैं। लेकिन मैं लाइन पर एक सरणी तक नहीं पहुंच रहा हूं जो कह रहा है कि रेंज-चेक त्रुटि उत्पन्न हो रही है। शायद यह param1 के लिए असाइनमेंट पर? लेकिन यह एक सीमा-जांच क्यों होगी और अगर ओवरफ्लो त्रुटि नहीं है, तो ऐसा क्यों होगा? जब मैं डेल्फी पूछना यह मूल्यांकन करने के लिए:रेंज चेक त्रुटि का कारण (डेल्फी)
const
C1 = 44001;
C2 = 17999;
function fxnName(..other params...; param1: Word): String;
var
someByte: byte;
begin
// some code
// by now we're in a loop. the following line is where it breaks to in the debugger:
param1 := (someByte + param1) * C1 + C2;
// more code
end;
यदि यह प्रासंगिक है, जब यह डीबगर में है कि लाइन पर टूट जाता है, सभी मूल्यों के रूप में उम्मीद, param1, जो दिखाता है " 'param1' अघोषित पहचानकर्ता" को छोड़कर देखो।
मुझे लगता था कि सिर्फ इसलिए कि सीमा की जांच अतिप्रवाह जांच से पहले होता यह है, और सीमा एक बार चेक अपवाद उठाया जाता है ओवरफ्लो चेक कभी नहीं होता है। (ऑर्डर के बारे में सुनिश्चित नहीं है, इसलिए यह सिर्फ एक संदेह है।) –