هل هناك أي طريقة للحصول على اسم الوحدة الحالي من ملف تضمين؟
-
06-09-2019 - |
سؤال
أقوم بتنفيذ بعض الكود من مكتبة إطارية واحدة إلى أخرى، مما يتطلب مني التعليق على أقسام كبيرة من التعليمات البرمجية لمجرد الحصول عليها لتجميعها، ثم استعادتها بعناية. في غضون ذلك، أحصل على الكثير من التحذيرات بسبب كل الكود المعلق. لذلك قررت كتابة ملف سريع تشمل لقمعها:
{$MESSAGE WARN 'Warnings suppressed for unported unit with commented-out code'}
{$WARN NO_RETVAL OFF}
{$WARN USE_BEFORE_DEF OFF}
أدرجت هذا في جميع الوحدات التي تعطيني الكثير من التحذيرات، ولكن الآن عندما أرادت، فإن التحويل البرمجي الذي يعيد الرسالة كما يلي:
تحذير DCC] غير مكتملة .inc (1): تحذيرات W1054 قمعت للوحدة غير المرفوعة مع رمز التعليق
أود أن أخبرني أن التحذير قادما من الوحدة التي تقوم بما في ذلك، وليس الملف الشخصي نفسه. هل هناك أي طريقة للقيام بذلك، أو للعمل اسم الوحدة في الرسالة، دون تحريك توجيه الرسائل $ في الواقع من ملف التضمين وفي كل وحدة واحدة حيث فعلت هذا؟
المحلول
فيما يلي خدعة، والتي تستخدم حقيقة أن تلميح التحويل البرمجي ل "الأساليب الخاصة غير المستخدمة" يحتوي على اسم الوحدة، يتم الإعلان عن الفئة، حتى لو تم الإعلان عن الفئة ذات الطريقة الخاصة في ملف تضمينه.
هذا يتطلب أن يظهر التوجيه التضمين لملف المجموع الخاص بك في جزء من الوحدة، حيث يسمح التصريحات, ، إما بعد بندات الاستخدامات في قسم الواجهة أو بعد تبليط استخدام قسم التنفيذ.
interface
uses Foo, Bar, Socks;
{$include Unfinished.inc}
يجب أن تبدو ملف المجموع الخاص بك مثل هذا:
{$MESSAGE WARN 'Warnings suppressed for unported unit with commented-out code, Unit name see next line'}
type
TUnit_With_Suppressed_Warnings = class
private
procedure UnitWithSuppressedWarnings; virtual; abstract;
end;
{$WARN NO_RETVAL OFF}
{$WARN USE_BEFORE_DEF OFF}
الآن، ستحصل على الرسائلتين التالية لكل وحدة تتضمن الملف الذي يتضمن الملف:
تحذير DCC] غير مكتملة .inc (1): تحذيرات W1054 قمعت لوحدة غير مرغوبة مع رمز التعليق، اسم الوحدة انظر السطر التالي
DCC HINT] ActualUnitname.pas (5): أعلن SuperwithsupsuppressedWarningsedWarnings ولكن لم تستخدم قط.
لاحظ أن اسم الوحدة الفعلية يظهر في السطر الثاني.
ملاحظة: لن ترى السطر الثاني، إذا تم إيقاف تلميحات التحويل البرمجي.