كيفية تعطيل التحذير في دلفي حول "قيمة الإرجاع ... قد تكون غير محددة"؟

StackOverflow https://stackoverflow.com/questions/61418

  •  09-06-2019
  •  | 
  •  

سؤال

لدي وظيفة تعطيني التحذير التالي:

[تحذير DCC] filename.pas(6939):W1035 قد تكون القيمة المرجعة للدالة "function" غير محددة

ومع ذلك، تكون الدالة نظيفة وصغيرة الحجم ولها قيمة إرجاع معروفة ومتوقعة.العبارة الأولى في الدالة هي:

Result := '';

ولا يوجد متغير محلي أو معلمة تسمى Result أيضاً.

هل هناك أي نوع من التوجيهات العملية التي يمكنني إحاطة هذه الطريقة بها لإزالة هذا التحذير؟هذا هو دلفي 2007.

لسوء الحظ، نظام المساعدة في تثبيت دلفي هذا لا يعمل، لذلك لا يمكنني إظهار المساعدة لهذا التحذير في الوقت الحالي.

هل يعرف أحد من أعلى رأسه ما الذي يمكنني فعله؟

هل كانت مفيدة؟

المحلول

هل أنت متأكد من أنك فعلت كل شيء لحل التحذير؟ربما يمكنك نشر الكود لكي نلقي نظرة عليه؟

يمكنك إيقاف تشغيل التحذير محليًا بهذه الطريقة:

{$WARN NO_RETVAL OFF}
function func(...): string;
begin
  ...
end;
{$WARN NO_RETVAL ON}

نصائح أخرى

لست متأكدًا من رغبتي في رؤية الرمز الخاص بهذه الوحدة...بعد كل شيء، الخطأ يحدث في السطر 6939 ...ربما تم تجاوز بعض جدول المترجم الداخلي؟

يبدو أن هناك نوعًا ما من الأخطاء في دلفي.اقرأ هذا المنشور، ويرتبط التعليق الأخير بتقارير الأخطاء الأخرى التي قد تكون هي تلك التي حصلت عليها:

http://qc.codegear.com/wc/qcmain.aspx?d=8144

إن {$WARN NO_RETVAL OFF} هو ما تبحث عنه، ولكن بشكل عام أود أن أعرف سبب حدوث أشياء كهذه.قد تفكر في تنسيقه بشكل مختلف ومعرفة ما إذا كان ذلك مفيدًا.

هل لديك أي أوامر لتغيير التدفق مثل Exit هناك؟هل تثير الاستثناءات بشكل مباشر وما إلى ذلك؟هل يحتوي بيان الحالة الخاص بك على شيء آخر في النهاية يحدد قيمة للنتيجة؟

قد تحاول تعديل هذه العناصر ومعرفة ما إذا كان ذلك يلغي التحذير أيضًا.

لكي تحصل على إجابة جيدة لهذا السؤال، سيتعين عليك نشر الرمز.بشكل عام، مترجم دلفي سيعطي هذا التحذير إذا كان هناك مسار كود محتمل قد يؤدي إلى عدم تحديد النتيجة.في بعض الأحيان يكون مسار الكود هذا أقل وضوحًا.

يوجد مثل هذا الخطأ في مترجم دلفي منذ Delphi4 على الأقل:إذا تجاوز مجموع أعداد معلمات الوظيفة (بما في ذلك الذات والنتيجة) والمتغيرات المحلية 31، فهذا يسبب مشاكل.على سبيل المثال، يمكنه كتابة تحذيرات W1035 (قد تكون النتيجة غير محددة).يمكن أن تفوت المتغيرات غير المستخدمة.فقط جرب هذا المشروع:

program TestCompilerProblems;

procedure Proc;
var
  a01, a02, a03, a04, a05, a06, a07, a08, a09, a10,
  a11, a12, a13, a14, a15, a16, a17, a18, a19, a20,
  a21, a22, a23, a24, a25, a26, a27, a28, a29, a30,
  a31, a32, a33, a34, a35, a36, a37, a38, a39, a40: Integer;
begin
end;

begin
  Proc;
end.

قد يؤدي إلى 31 تلميحًا وليس 40.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top