سؤال

أرغب في تعطيل تحذير محدد (W1035) في الكود الخاص بي ، لأنني أعتقد أن المترجم مخطئ في هذا التحذير:

function TfrmNagScreen.Run: TOption;
begin
  if ShowModal = mrOk then
    Result := TOption(rdgAction.EditValue)
  else
    Abort
end;

لا توجد طريقة يمكن أن تكون النتيجة غير محددة ، منذ ذلك الحين Abort رميات EAbort.

حاولت:

  • {$WARN 1035 Off}: يبدو أن هذا لا يعمل إلا لبعض الأخطاء المحددة (انظر توثيق)
  • {$W-1035}: لا شيء على الإطلاق

أعلم أنه يمكنني إيقاف التحذير على مستوى العالم في خيارات المشروع ، أو باستخدام {$WARNINGS OFF}, ، لكن هذا ليس هو المقصود هنا.

تحرير: لقد قمت بهذا الآن إلى هذا #89744.

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

المحلول

لا يمكنك تعطيل هذا التحذير على مستوى العالم ، ولكن يمكنك استخدام {$WARN NO_RETVAL OFF} لتعطيل التحذير محليا.

{$WARN NO_RETVAL OFF}
function TfrmNagScreen.Run: TOption;
begin
  if ShowModal = mrOk then
    Result := TOption(rdgAction.EditValue)
  else
    Abort
end;
{$WARN NO_RETVAL ON}

نصائح أخرى

ليس لدي برنامج التحويل البرمجي Delphi متاح في الوقت الحالي ، ولكن إعادة ترتيب الكود لإزالة if..else قد يجعل التحذير يختفي:

function TfrmNagScreen.Run: TOption;
begin
  if ShowModal <> mrOk then
    Abort;

  Result := TOption(rdgAction.EditValue);
end;

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

يمكنك استخدام خدعة أنيقة لخداع المترجم. حدد وظيفة المكتبة على النحو التالي:

procedure Abort(var X);
begin
  SysUtils.Abort;
end;

يمكنك بعد ذلك كتابة وظيفتك على النحو التالي:

if ShowModal = mrOk then
  Result := TOption(rdgAction.EditValue)
else
  Abort(Result)

يعتقد المترجم أنك كتبت للنتيجة لأنها معلمة var وتتوقف عن التثبيت.

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