ใน Delphi ยังมีคำสั่งที่คอมไพล์ไว้ล่วงหน้าคล้ายกับ C แม้ว่าคำสั่งประเภทนี้จะมีผลเฉพาะในไฟล์เดียวปัจจุบันเท่านั้น (อาจเป็นไปได้ว่าผู้เขียนไม่เข้าใจการใช้งานจริงของคำสั่งประเภทนี้อย่างถ่องแท้) คำสั่งประเภทนี้ คำสั่งมีประโยชน์สำหรับการคอมไพล์หลายเวอร์ชัน (เช่น การเผยแพร่เวอร์ชันการเรียนรู้จากเวอร์ชันมาตรฐาน) มีประโยชน์ค่อนข้างมาก
หนึ่ง. คำแนะนำเบื้องต้น:
1. กำหนดคำสั่ง:
รูปแบบ: {$DEFINE ชื่อ}
คำอธิบาย: ใช้เพื่อกำหนดสัญลักษณ์ (Symbol) ที่ถูกต้องในหน่วยปัจจุบัน กำหนดไว้
จากนั้นคุณสามารถใช้คำสั่ง IF DEF และ IFNDEF เพื่อตรวจสอบว่าสัญลักษณ์นั้นมีอยู่หรือไม่
2. คำสั่ง UNDEF:
รูปแบบ: {$UNDEF ชื่อ}
คำอธิบาย: ใช้เพื่อยกเลิกสัญลักษณ์ (Symbol) ที่กำหนดไว้ในหน่วยปัจจุบัน คำสั่งนี้และ DEFINE
ใช้ร่วมกัน
3. คำสั่ง IFDEF:
รูปแบบ: {$IFDEF ชื่อ}
หมายเหตุ: หากมีการกำหนดชื่อหลังจากคำสั่งนี้ ส่วนของโค้ดหลังจากคำสั่งนี้จนถึง {$ELSE} หรือ {$ENDIF} จะถูกคอมไพล์
4. คำสั่ง IFNDEF:
รูปแบบ: {$IFNDEF ชื่อ}
หมายเหตุ: หากไม่ได้กำหนดชื่อตามคำสั่งนี้ ส่วนของโค้ดที่อยู่หลังคำสั่งนี้จนถึง {$ELSE} หรือ {$ENDIF} จะถูกคอมไพล์
5. คำสั่ง IFOPT:
รูปแบบ: {$สวิตช์ IFOPT}
หมายเหตุ: หากสวิตช์หลังจากคำสั่งนี้ได้รับการตั้งค่าแล้ว ส่วนของโค้ดหลังจากคำสั่งนี้จนถึง {$ELSE} หรือ {$ENDIF} จะถูกคอมไพล์
ตัวอย่าง: {$IFOPT R+}
Writeln('เปิดสวิตช์ตรวจสอบช่วงเมื่อทำการคอมไพล์');
{$ENDIF}
6. คำแนะนำอื่น:
รูปแบบ: {$ELSE}
คำอธิบาย: ตรวจสอบว่าส่วนของโค้ดระหว่างคำสั่งและ {$ENDIF} ควรถูกคอมไพล์หรือละเว้นโดยการตัดสินนิพจน์แบบมีเงื่อนไขของคำนำหน้า Ifxxx
7. คำสั่ง ENDIF:
รูปแบบ: {$ENDIF}
คำอธิบาย: ร่วมมือกับ Ifxxx เพื่อระบุตำแหน่งสิ้นสุดของเซ็กเมนต์ซอร์สโค้ดของเซ็กเมนต์ที่คอมไพล์แบบมีเงื่อนไข
สอง. ตัวอย่าง:
เขียนตัวอย่างเพื่อดำเนินการคอมไพล์โดยไม่มีส่วนของโค้ดโดยการกำหนดสัญลักษณ์การคอมไพล์ต่างๆ ไว้ล่วงหน้า
1. สร้างโครงการ Delphi ใหม่และเพิ่มปุ่มปุ่มในรูปแบบของหน่วย Unit1
2. เขียนโปรแกรมได้ดังนี้:
หน่วย หน่วยที่ 1;
อินเตอร์เฟซ
การใช้งาน
Windows, ข้อความ, SysUtils, คลาส, กราฟิก, การควบคุม, แบบฟอร์ม, กล่องโต้ตอบ,
StdCtrls;
พิมพ์
TForm1 = คลาส (TForm)
Button1: T ปุ่ม;
PROcedure FormCreate (ผู้ส่ง: TObject);
ขั้นตอน Button1Click (ผู้ส่ง: TObject);
ส่วนตัว
{ประกาศส่วนตัว}
สาธารณะ
{ประกาศสาธารณะ}
ก : สตริง;
จบ;
var
แบบฟอร์ม 1: TForm1;
การดำเนินการ
{$R *.DFM}
{$DEFINE AAA} // บรรทัดคำจำกัดความ
ขั้นตอน TForm1.FormCreate (ผู้ส่ง: TObject);
เริ่ม
ก := 'อื่นๆ';
{$IFDEF AAA}
ก := 'AAA';
{$ENDIF}
{$IFDEF BBB}
ก := 'BBB';
{$ENDIF}
จบ;
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
เริ่ม
คำบรรยาย := ก;
จบ;
จบ.
{หมายเหตุ: ข้อความที่เป็นตัวหนาคือรหัสที่ป้อน}
3. หลังจากคอมไพล์และรันแล้ว ให้กดปุ่ม และคุณจะเห็น "AAA" ปรากฏในแถบชื่อเรื่องของแบบฟอร์ม โปรแกรมรวบรวมคำสั่ง a := 'AAA'
4. เปลี่ยนส่วนของโปรแกรมที่กำหนดบรรทัด:
เมื่อเปลี่ยนเป็น
{$กำหนด BBB}
เมื่อคุณคอมไพล์และรันอีกครั้ง คุณจะเห็น "BBB" แสดงในแถบชื่อเรื่องของแบบฟอร์ม โปรแกรมรวบรวมคำสั่ง a := 'BBB'
เมื่อยกเลิกการกำหนดแถวหรือเปลี่ยนเป็น
{$กำหนดไม่มีอะไร}
หรือชื่ออื่นๆ ให้คอมไพล์และรันอีกครั้ง แล้วคุณจะเห็น "อื่นๆ" ปรากฏที่แถบชื่อเรื่องของแบบฟอร์ม โปรแกรมจะรวบรวมคำสั่ง a := 'Other' เท่านั้น
สาม. วิธีสร้างและเปลี่ยนเวอร์ชันอย่างรวดเร็ว:
เมื่อใช้คำสั่งการคอมไพล์ล่วงหน้า เมื่อสร้างโปรแกรมเดียวกันหลายเวอร์ชัน คุณเพียงแค่ต้องค้นหาหน่วยที่แตกต่างกันในแต่ละเวอร์ชัน กำหนดสัญลักษณ์เวอร์ชันรวม (สัญลักษณ์) ตามลำดับ จากนั้นจึงเพิ่มคำสั่งการคอมไพล์ล่วงหน้าแบบมีเงื่อนไขให้กับส่วนของโปรแกรม คุณสามารถเลือกได้ คอมไพล์ส่วนของโปรแกรมที่แตกต่างกันระหว่างการคอมไพล์จริง ซึ่งมีผลดีต่อมาตรฐานของโปรแกรม (การกำหนดสัญลักษณ์เวอร์ชันรวม) และการรักษาความลับ (เวอร์ชันที่ต่างกันจะคอมไพล์ส่วนของโปรแกรมที่แตกต่างกัน)
อย่างไรก็ตาม เนื่องจากคำสั่งที่คอมไพล์แล้วประเภทนี้สามารถดำเนินการกับหน่วยปัจจุบันเท่านั้น ความไม่สะดวกคือไม่สามารถกำหนดสัญลักษณ์เวอร์ชันได้เพียงครั้งเดียวในหน่วยทั่วไป แต่ต้องกำหนดสัญลักษณ์เวอร์ชันแบบรวมในแต่ละหน่วย ดังนั้น เมื่อเปลี่ยนเวอร์ชัน คุณต้องตรวจสอบให้แน่ใจว่าได้เปลี่ยนสัญลักษณ์เวอร์ชันทั้งหมดเพื่อให้แน่ใจว่าแต่ละเวอร์ชันถูกต้อง สำหรับสิ่งนี้ คุณสามารถใช้ฟังก์ชัน "ค้นหาใน" ของ Delphi IDE ไฟล์..." (ค้นหาสตริงในหลายไฟล์) ทำหน้าที่ค้นหาไฟล์และตำแหน่งทั้งหมดที่กำหนดสัญลักษณ์เวอร์ชัน จากนั้นเปลี่ยนตามลำดับเพื่อให้แน่ใจว่าตำแหน่งทั้งหมดได้รับการแก้ไขแล้ว