以下内容来源于网络,整理在一块儿方便以后回顾查看。

Delphi 的编译指令(1) DEFINE、DEFINE、DEFINE、UNDEF、IFDEF、IFDEF、IFDEF、ELSE、$ENDIF

一个程序从无到有的过程是这样的: 编辑代码 -> 预处理 -> 编译(成dcu等) -> 链接(为exe等).

什么是预处理?
譬如 VCL 中有很多代码是兼容 Linux 的, 在 Windows 下就需要在编译之前预处理掉那些 for Linux 的代码.

1、判断操作系统:
其中的 “MSWINDOWS” 和 “LINUX” 就是 Delphi 预定义的 “条件标识符”.

begin{$IFDEF MSWINDOWS}ShowMessage('Windows');{$ENDIF}{$IFDEF LINUX}ShowMessage('Linux');{$ENDIF}
end;

2、自定义条件标识符(DEFINE):
下面例子中自定义了条件标识符: WanYi; 标识符和定义它的指令都不区分大小写, 但大家一般惯用大写.

begin{$DEFINE WANYI}{$IFDEF WanYi}ShowMessage('标识符 WanYi 已定义');{$ELSE}ShowMessage('标识符 WanYi 未定义');{$ENDIF}
end;

3、取消条件标识符的定义(UNDEF):

begin{$DEFINE WANYI}{$IFDEF WANYI} ShowMessage('确认标识符 WanYi 是否定义');{$ENDIF}{$UNDEF WANYI}{$IFDEF WANYI} ShowMessage('再次确认标识符 WanYi 是否定义');{$ENDIF}
end;

4、取消定义的简单办法:
在 {$…} 的 $ 前面随便加点什么, 让它变成 “注释”, 譬如: {.$}

begin{.$DEFINE WANYI}{$IFDEF WANYI} ShowMessage('确认标识符 WanYi 是否定义');{$ENDIF}{.$UNDEF WANYI}{$IFDEF WANYI} ShowMessage('再次确认标识符 WanYi 是否定义');{$ENDIF}
end;

5、调试编译指令时特别要注意的:
Delphi 有个常识: 如果单元代码没有改变, 相应的 dcu 不会重新生成!

因此, 为了有准确的调试结果, 执行前先用 Shift+F9 强制编译当前工程, 然后再 Run;
强制编译所有相关单元也可以, 方法: Project -> Build all project.

当然修改下代码也很方便, 譬如在代码中打个空格再退回来.

6、测试预定义的 Debug 和 Release:
当我们当新建一个工程, Delphi 默认的是调试(Debug)状态, 当我们发布软件时应该切换到发布(Release)状态.
两种状态下编译指令是有区别的, 在 Release 状态下发布的 dcu 或 exe 会更小、更优化.

Debug 和 Release 的切换方法:
进入 Project Manager -> Build Configurations, 在 Debug 或 Release 上双击, 或从右键 Activate.

下面的代码可以检测到这种改变, 不过要注意上面提到的 Shift+F9 或 Project -> Build all

project.
begin{$IFDEF DEBUG}ShowMessage('调试模式');{$ENDIF}{$IFDEF RELEASE}ShowMessage('发布模式');{$ENDIF}
end;

7、编译指令写在哪?:
编译指令可以写在代码页的任何地方, 不过在代码的不同区域有时也会不同;

譬如: {KaTeX parse error: Expected 'EOF', got '}' at position 12: APPTYPE GUI}̲ 和 {APPTYPE CONSOLE} 就只能写在工程文件里才有效.

{KaTeX parse error: Expected 'EOF', got '}' at position 12: APPTYPE GUI}̲ 和 {APPTYPE CONSOLE} 分别表示窗口工程和控制台工程.
其中 {$APPTYPE GUI} 是默认的, 所以很少见到它.

它甚至可以嵌入到代码行当中, 譬如 ActnColorMaps 单元就有这么一句:
begin
SystemParametersInfo(SPI_GETFLATMENU, 0, {KaTeX parse error: Expected 'EOF', got '}' at position 11: IFNDEF CLR}̲@{ENDIF}FlatMenus, 0);
end;

8、条件标识符的有效范围:
Delphi 预定义的条件标识符都是全局的, 我们用 {$DEFINE …} 自定义的标识符都是局部的.

如何自定义全局的标识符呢?
Project -> Options… -> 选定 Delphi Compiler -> 点击 Conditional defines 右边小按钮 -> 添加.

不过这和系统预定义的还是有区别, 咱们自定义的只能用于当前文件.

如何定义每个文件都可以使用的标识符呢?
从 Project -> Options… 定义后, 马上选择左下角的 Default.

这和系统预定义的还是有区别, 因为这只能左右以后的文件, 管不着以前存在的文件.
如何…没办法了.

其他编译指令, 譬如在 Debug 或 Release 中的设置也都是这样; 也就是说: 每个文件都有相对独立的编译设置.

看到 Project -> Options… 马上明白了编译指令的设置方法有两种:
1、使用 {$…} 在代码中嵌入;
2、从 Project -> Options… 设置.

但在代码中嵌入有时是不可替代的, 譬如现在讨论的条件编译.

9、编译指令有多少?:
现在谈到的还只是条件编译, 实际应用最多的是开关编译; 在任一代码页执行快捷键 Ctrl+O+O , 然后看看最上面…

下面列出了这些默认设置:

{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N-,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
{$WARN SYMBOL_DEPRECATED ON}
{$WARN SYMBOL_LIBRARY ON}
{$WARN SYMBOL_PLATFORM ON}
{$WARN SYMBOL_EXPERIMENTAL ON}
{$WARN UNIT_LIBRARY ON}
{$WARN UNIT_PLATFORM ON}
{$WARN UNIT_DEPRECATED ON}
{$WARN UNIT_EXPERIMENTAL ON}
{$WARN HRESULT_COMPAT ON}
{$WARN HIDING_MEMBER ON}
{$WARN HIDDEN_VIRTUAL ON}
{$WARN GARBAGE ON}
{$WARN BOUNDS_ERROR ON}
{$WARN ZERO_NIL_COMPAT ON}
{$WARN STRING_CONST_TRUNCED ON}
{$WARN FOR_LOOP_VAR_VARPAR ON}
{$WARN TYPED_CONST_VARPAR ON}
{$WARN ASG_TO_TYPED_CONST ON}
{$WARN CASE_LABEL_RANGE ON}
{$WARN FOR_VARIABLE ON}
{$WARN CONSTRUCTING_ABSTRACT ON}
{$WARN COMPARISON_FALSE ON}
{$WARN COMPARISON_TRUE ON}
{$WARN COMPARING_SIGNED_UNSIGNED ON}
{$WARN COMBINING_SIGNED_UNSIGNED ON}
{$WARN UNSUPPORTED_CONSTRUCT ON}
{$WARN FILE_OPEN ON}
{$WARN FILE_OPEN_UNITSRC ON}
{$WARN BAD_GLOBAL_SYMBOL ON}
{$WARN DUPLICATE_CTOR_DTOR ON}
{$WARN INVALID_DIRECTIVE ON}
{$WARN PACKAGE_NO_LINK ON}
{$WARN PACKAGED_THREADVAR ON}
{$WARN IMPLICIT_IMPORT ON}
{$WARN HPPEMIT_IGNORED ON}
{$WARN NO_RETVAL ON}
{$WARN USE_BEFORE_DEF ON}
{$WARN FOR_LOOP_VAR_UNDEF ON}
{$WARN UNIT_NAME_MISMATCH ON}
{$WARN NO_CFG_FILE_FOUND ON}
{$WARN IMPLICIT_VARIANTS ON}
{$WARN UNICODE_TO_LOCALE ON}
{$WARN LOCALE_TO_UNICODE ON}
{$WARN IMAGEBASE_MULTIPLE ON}
{$WARN SUSPICIOUS_TYPECAST ON}
{$WARN PRIVATE_PROPACCESSOR ON}
{$WARN UNSAFE_TYPE OFF}
{$WARN UNSAFE_CODE OFF}
{$WARN UNSAFE_CAST OFF}
{$WARN OPTION_TRUNCATED ON}
{$WARN WIDECHAR_REDUCED ON}
{$WARN DUPLICATES_IGNORED ON}
{$WARN UNIT_INIT_SEQ ON}
{$WARN LOCAL_PINVOKE ON}
{$WARN MESSAGE_DIRECTIVE ON}
{$WARN TYPEINFO_IMPLICITLY_ADDED ON}
{$WARN RLINK_WARNING ON}
{$WARN IMPLICIT_STRING_CAST ON}
{$WARN IMPLICIT_STRING_CAST_LOSS ON}
{$WARN EXPLICIT_STRING_CAST OFF}
{$WARN EXPLICIT_STRING_CAST_LOSS OFF}
{$WARN CVT_WCHAR_TO_ACHAR OFF}
{$WARN CVT_NARROWING_STRING_LOST OFF}
{$WARN CVT_ACHAR_TO_WCHAR OFF}
{$WARN CVT_WIDENING_STRING_LOST OFF}
{$WARN XML_WHITESPACE_NOT_ALLOWED ON}
{$WARN XML_UNKNOWN_ENTITY ON}
{$WARN XML_INVALID_NAME_START ON}
{$WARN XML_INVALID_NAME ON}
{$WARN XML_EXPECTED_CHARACTER ON}
{$WARN XML_CREF_NO_RESOLVE ON}
{$WARN XML_NO_PARM ON}
{$WARN XML_NO_MATCHING_PARM ON}

Delphi 的编译指令(2) 条件语句的更多用法

  1. $IFDEF 等同于 $IF DEFINED(…) :
    它们的结束分别是: ENDIF、ENDIF、ENDIF、IFEND; 例子中的 VER200 是 Delphi 2009 的标识.

    begin
    {KaTeX parse error: Expected 'EOF', got '}' at position 13: IFDEF VER200}̲ ShowMessa…ENDIF}

    {KaTeX parse error: Expected 'EOF', got '}' at position 19: …DEFINED(VER200)}̲ ShowMessa…IFEND}
    end;

  2. $IFNDEF 等同于 $IF NOT DEFINED(…) :
    它们的结束分别是: ENDIF、ENDIF、ENDIF、IFEND; 例子中的 VER150 是 Delphi 7 的标识.

    begin
    {KaTeX parse error: Expected 'EOF', got '}' at position 14: IFNDEF VER150}̲ ShowMessa…ENDIF}

    {KaTeX parse error: Expected 'EOF', got '}' at position 23: …DEFINED(VER150)}̲ ShowMessa…IFEND}
    end;

  3. 可以使用 or 和 and:

    begin
    {KaTeX parse error: Expected 'EOF', got '}' at position 11: DEFINE AAA}̲ {DEFINE BBB}

    {KaTeX parse error: Expected 'EOF', got '}' at position 32: …OR DEFINED(BBB)}̲ ShowMessa…IFEND}

    {KaTeX parse error: Expected 'EOF', got '}' at position 33: …ND DEFINED(BBB)}̲ ShowMessa…IFEND}
    end;

  4. 可以使用 System 单元里的常量:
    我测试了 System 单元里的很多常量都没问题.

    begin
    ShowMessage(FloatToStr(CompilerVersion)); {在 Delphi 2009 中, CompilerVersion = 20.0}

    {KaTeX parse error: Expected 'EOF', got '}' at position 27: …Version >= 17.0}̲ ShowMessa…IFEND}
    end;

  5. 使用 $IFOPT 判断编译开关:
    Delphi 挺好玩, 26个字母分别安排成不同的开关指令(用 Ctrl+o+o 查看, 当然开关指令不止这些);
    $IFOPT 可以判断这些指令是否打开.
    这个指令不是很常用, 我看了一下 2009 的 VCL 源码, 总共才用了 6 次.

    begin
    {KaTeX parse error: Expected 'EOF', got '}' at position 9: IFOPT B+}̲ ShowMessa…ELSE}
    ShowMessage(‘指令 B 已关闭’);
    {$ENDIF}

    {KaTeX parse error: Expected 'EOF', got '}' at position 3: B+}̲ {IFOPT B+}
    ShowMessage(‘Ok!’);
    {$ENDIF}
    end;

Delphi 的编译指令(3) 常用的预定义条件标识符

版本标识:
VER10  : Turbo Pascal 1
VER20  : Turbo Pascal 2
VER30  : Turbo Pascal 3
VER40  : Turbo Pascal 4
VER50  : Turbo Pascal 5
VER60  : Turbo Pascal 6
VER70  : Turbo Pascal 7 / Borland Pascal 7
VER80  : Delphi 1
VER90  : Delphi 2
VER100 : Delphi 3
VER110 : ?
VER120 : Delphi 4
VER130 : Delphi 5
VER140 : Delphi 6
VER150 : Delphi 7
VER160 : Delphi 8
VER170 : Delphi 2005
VER180 : Delphi 2006
VER185 : Delphi 2007
VER190 : ?
VER200 : Delphi 2009其他:
MSWINDOWS
WIN32
LINUX
KYLIX
CLR
VSNETCONSOLEDEBUG
RELEASEPDEBUGSUNICODE
UNICODESTRING

Delphi 的编译指令(4) 编译指令全表

https://www.cnblogs.com/del/archive/2008/12/19/1358274.html指令及默认值    可选值 范围  注释  举例
{$A8}
{$ALIGN8}   {$A+},{$A-},
{$A1},{$A2},{$A4},{$A8};
{$ALIGN ON},{$ALIGN OFF},
{$ALIGN 1},{$ALIGN 2},
{$ALIGN 4},{$ALIGN 8}   Local
{$APPTYPE GUI}  {$APPTYPE GUI},
{$APPTYPE CONSOLE}  Global
{$B-}
{$BOOLEVAL OFF} {$B+},{$B-};
{$BOOLEVAL ON},
{$BOOLEVAL OFF} Local
{$C+}
{$ASSERTIONS ON}    {$C+},{$C-};
{$ASSERTIONS ON},
{$ASSERTIONS OFF}   Local
{$D+}
{$DEBUGINFO ON} {$D+},{$D-}
{$DEBUGINFO ON},
{$DEBUGINFO OFF}    Global
{$DENYPACKAGEUNIT OFF}  {$DENYPACKAGEUNIT ON},  Local
{$DESCRIPTION 'text'}     Global
{$DESIGNONLY OFF}   {$DESIGNONLY ON},
{$DESIGNONLY OFF}   Local
{$E-}   {$E+},{$E-}     
{$E extension}
{$EXTENSION extension}   
{$EXTERNALSYM identifier}
{$F-}   {$F+},{$F-}     
{$FINITEFLOAT ON}   {$FINITEFLOAT ON},
{$FINITEFLOAT OFF}  Global
{$G+}
{$IMPORTEDDATA ON}  {$G+},{$G-};
{$IMPORTEDDATA ON},
{$IMPORTEDDATA OFF} Local
{$H+}
{$LONGSTRINGS ON}   {$H+},{$H-}
{$LONGSTRINGS ON},
{$LONGSTRINGS OFF}  Local
{$HINTS ON} {$HINTS ON},
{$HINTS OFF}    Local
{$HPPEMIT 'string'}
{$I filename}
{$INCLUDE filename}     Local
{$I+}
{$IOCHECKS ON}  {$I+},{$I-};
{$IOCHECKS ON},
{$IOCHECKS OFF} Local        
{$IMAGEBASE $00400000}  {$IMAGEBASE number} Global
{$IMPLICITBUILD ON},{$IMPLICITBUILD OFF}    {$IMPLICITBUILD ON} Global
{$J-}
{$WRITEABLECONST OFF}   {$J+},{$J-}
{$WRITEABLECONST ON},
{$WRITEABLECONST OFF}   Local
{$K-}   {$K+},{$K-}
{$L+}
{$LOCALSYMBOLS ON}  {$L+},{$L-}
{$LOCALSYMBOLS ON},
{$LOCALSYMBOLS OFF} Global
{$L filename}
{$LINK filename}        Local        
$LIBPREFIX 'lib' or $SOPREFIX 'bpl'
$LIBSUFFIX ' '
$LIBVERSION ' '   $LIBPREFIX 'string'
$LIBSUFFIX 'string'
$LIBVERSION 'string'  Global       
{$M-}
{$TYPEINFO OFF} {$M+},{$M-}
{$TYPEINFO ON},
{$TYPEINFO OFF} Local
{$M 16384,1048576}  {$M minstacksize,maxstacksize};
{$MINSTACKSIZE number}
{$MAXSTACKSIZE number}           
{$M 1048576}    {$M reservedbytes}
{$RESOURCERESERVE reservedbytes}    Global  Linux    
{$MESSAGE HINT|WARN|ERROR|FATAL 'text string'}        Local        
{$METHODINFO OFF}   {$METHODINFO ON},
{$METHODINFO OFF}            
{$N+}  {$N+},{$N-}
{$NODEFINE identifier}               
{$NOINCLUDE filename}                
{$O+}
{$OPTIMIZATION ON}  {$O+},{$O-};
{$OPTIMIZATION ON},
{$OPTIMIZATION OFF} Local
{$ObjExportAll Off} {$ObjExportAll On},
{$ObjExportAll Off} Global
{$P+}
{$OPENSTRINGS ON}   {$P+},{$P-}
{$OPENSTRINGS ON},
{$OPENSTRINGS OFF}  Local
{$POINTERMATH OFF}  {$POINTERMATH ON},
{$POINTERMATH OFF}  Local        
{$Q-}
{$OVERFLOWCHECKS OFF}   {$Q+},{$Q-}
{$OVERFLOWCHECKS ON},
{$OVERFLOWCHECKS OFF}   Local
{$R filename}
{$RESOURCE filename}
{$R *.xxx}
{$R filename.res filename.rc}                
{$R-}
{$RANGECHECKS OFF}  {$R+},{$R-}
{$RANGECHECKS ON},
{$RANGECHECKS OFF}  Local
{$REALCOMPATIBILITY OFF}    {$REALCOMPATIBILITY ON},
{$REALCOMPATIBILITY OFF}    Local        
{$RUNONLY OFF}  {$RUNONLY ON},
{$RUNONLY OFF}  Local        
{$S-}   {$S+},{$S-}
{$SetPEFlags <integer expression>}
{$SetPEOptFlags <integer expression>}     Local        
{$T-}
{$TYPEDADDRESS OFF} {$T+},{$T-}
{$TYPEDADDRESS ON},
{$TYPEDADDRESS OFF} Global
{$U-}
{$SAFEDIVIDE OFF}   {$U+},{$U-}
{$SAFEDIVIDE ON},
{$SAFEDIVIDE OFF}   Local
{$V+}
{$VARSTRINGCHECKS ON}   {$V+},{$V-}
{$VARSTRINGCHECKS ON},
{$VARSTRINGCHECKS OFF}  Local
{$W-}
{$STACKFRAMES OFF}  {$W+},{$W-}
{$STACKFRAMES ON},
{$STACKFRAMES OFF}  Local
{$WARN ON}  {$WARN identifier ON},
{$WARN identifier OFF}  Local        
{$WARNINGS ON}  {$WARNINGS ON},
{$WARNINGS OFF} Local        
{$WEAKPACKAGEUNIT OFF}  {$WEAKPACKAGEUNIT ON},
{$WEAKPACKAGEUNIT OFF}  Local        
{$X+}
{$EXTENDEDSYNTAX ON}    {$X+},{$X-};
{$EXTENDEDSYNTAX ON},
{$EXTENDEDSYNTAX OFF}   Global
{$YD}
{$DEFINITIONINFO ON}    {$Y+},{$Y-},{$YD};
{$REFERENCEINFO ON},
{$REFERENCEINFO OFF};
{DEFINITIONINFO ON},
{DEFINITIONINFO OFF}    Global
{$Z1}
{$MINENUMSIZE 1}    {$Z1},{$Z2},{$Z4};
{$MINENUMSIZE 1},
{$MINENUMSIZE 2},
{$MINENUMSIZE 4}    Local
$DEFINE
$UNDEF$IFDEF
$ELSE
$ENDIF{$IF DEFINED(...)}
{$IFEND}{$IF NOT DEFINED(...)}
{$IFEND}{$IF DEFINED(...) OR DEFINED(...)}
{$IFEND}{$IF DEFINED(...) AND DEFINED(...)}
{$IFEND}{$IF System.Const >= Number}
{$IFEND}{$IFOPT ...}
{$ELSE}
{$ENDIF}                 {$region 'text'} ... {$endregion}                Delphi 2009、2010 减小文件尺寸的方法:
//在 dpr 文件中加入:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

命令行编译命令

Borland Delphi Version 14.0
Copyright (c) 1983,2002 Borland Software CorporationSyntax: dcc32 [options] filename [options]-A<unit>=<alias> = Set unit alias  -LU<package> = Use package        -B = Build all units               -M = Make modified units         -CC = Console target               -N<path> = DCU output directory  -CG = GUI target                   -O<paths> = Object directories   -D<syms> = Define conditionals     -P = look for 8.3 file names also-E<path> = EXE output directory    -Q = Quiet compile               -F<offset> = Find error            -R<paths> = Resource directories -GD = Detailed map file            -U<paths> = Unit directories     -GP = Map file with publics        -V = Debug information in EXE    -GS = Map file with segments       -VR = Generate remote debug (RSM)-H = Output hint messages          -W = Output warning messages     -I<paths> = Include directories    -Z = Output 'never build' DCPs   -J = Generate .obj file            -$<dir> = Compiler directive     -JP = Generate C++ .obj file       --help = Show this help screen   -K<addr> = Set image base addr     --version = Show name and version
Compiler switches: -$<letter><state> (defaults are shown below)A8  Aligned record fields           P+  Open string params            B-  Full boolean Evaluation         Q-  Integer overflow checking     C+  Evaluate assertions at runtime  R-  Range checking                D+  Debug information               T-  Typed @ operator              G+  Use imported data references    U-  Pentium(tm)-safe divide       H+  Use long strings by default     V+  Strict var-strings            I+  I/O checking                    W-  Generate stack frames         J-  Writeable structured consts     X+  Extended syntax               L+  Local debug symbols             Y+  Symbol reference info         M-  Runtime type info               Z1  Minimum size of enum types    O+  Optimization

使用 {$ INCLUDE} 或 {$I} 指令管理和调用自定义函数**

这是一个简单、方便而又实用的小技巧. 譬如这段代码中有四个定义函数: MyAdd、MyDec、MyMul、MyDiv

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs;typeTForm1 = class(TForm)procedure FormCreate(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}//譬如下面四个自定义函数 *****************************
function MyAdd(const a,b: Integer): Integer;
beginResult := a + b;
end;function MyDec(const a,b: Integer): Integer;
beginResult := a - b;
end;function MyMul(const a,b: Integer): Integer;
beginResult := a * b;
end;function MyDiv(const a,b: Integer): Integer;
beginResult := a div b;
end;
//****************************************************//调用测试
procedure TForm1.FormCreate(Sender: TObject);
constx = 8;y = 2;
beginShowMessageFmt('%d,%d,%d,%d',[MyAdd(x,y), MyDec(x,y), MyMul(x,y), MyDiv(x,y)]);{显示结果: 10,6,16,4}
end;end.

我们可以把其中的自定义函数(也可以是其他代码)剪切保存在一个文本文件中(譬如是: C:\DelphiFun\MyFun.inc);

然后在原来代码的位置用 {KaTeX parse error: Expected 'EOF', got '\DelphiFun' at position 11: INCLUDE C:\̲D̲e̲l̲p̲h̲i̲F̲u̲n̲\MyFun.inc} 或 {I C:\DelphiFun\MyFun.inc} 再引入即可(可以使用相对路径).

下面是使用后的代码:

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs;typeTForm1 = class(TForm)procedure FormCreate(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}{$I C:\DelphiFun\MyFun.inc}//调用测试
procedure TForm1.FormCreate(Sender: TObject);
constx = 8;y = 2;
beginShowMessageFmt('%d,%d,%d,%d',[MyAdd(x,y), MyDec(x,y), MyMul(x,y), MyDiv(x,y)]);{显示结果: 10,6,16,4}
end;end.

另外: 引入 C 语言的 obj 文件是用 {$L 路径} 指令完成的.

Delphi编译指令了解学习相关推荐

  1. Delphi 编译指令与说明

    一个程序从无到有的过程是这样的: 编辑代码 -> 预处理 -> 编译(成dcu等) -> 链接(为exe等). 一.什么是预处理? 譬如 VCL 中有很多代码是兼容 Linux 的, ...

  2. Delphi编译指令说明

    Delphi快速高小的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流,大部分情况下不需要干涉编译器的运行,但是有时也需要对编译器进行必要的设置. ******** ...

  3. Delphi编译指令详解-收集②

    {$IFDEF WIN32} -- 這可不是註解喔! 對於Delphi來說﹐左右大括號之間的內容是註解﹐然而「{$」 (左括號後緊接著貨幣符號)對於Compiler(編譯器)而言並不是註解﹐ 而是寫給 ...

  4. DELPHI的编译指令

    DELPHI的编译指令  可以检测到这种改变,   (1)  Shift+F9 或 Project -> Build all project.                           ...

  5. Delphi 的编译指令(1): $DEFINE、$UNDEF、$IFDEF、$ELSE、$ENDI

    2019独角兽企业重金招聘Python工程师标准>>> 一个程序从无到有的过程是这样的: 编辑代码 -> 预处理 -> 编译(成dcu等) -> 链接(为exe等) ...

  6. Delphi 简单的编译指令

    RAD Studio 10.2.3 测试√ uCompile_ZhiLing.pas // 编译指令 unit uCompile_ZhiLing;interfaceusesSystem.SysUtil ...

  7. c语言if多条件并列_C/C++编程笔记:C语言预编译指令—条件编译,零基础推荐收藏

    一. 内容概述 本文主要介绍c语言中条件编译相关的预编译指令,包括#define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. 二.条件编 ...

  8. 教程-Delphi编译就报毒

    这几天都在忙专周实验,今天用到delphi,一到编译时nod32就报毒,编译空文件也报毒,上网查了资料才明白,是编译文件被感染了,生成软件就会报毒.把自己找到的资料分享如下: 重新编译时,生成的exe ...

  9. FPGA之道(36)Verilog中的编译指令

    文章目录 前言 Verilog中的编译指令 define指令 timescale指令 inlcude指令 前言 本文摘自<FPGA之道>,一起来了解下Verilog中的编译指令. Veri ...

最新文章

  1. ueditor 1.4.3 JSP 配置
  2. Python3 列表的基本操作
  3. 设置DateChooser控件的头部文字对齐方式.
  4. 读《我们应当怎样做需求分析》后
  5. Accumulator
  6. mysql按域排序_如何在MySQL中对域名进行排序?
  7. 一个站点存在多个web.config时如何管理?
  8. 感觉小轿车要比SUV舒服,为什么很多人还是选择了SUV?
  9. SqlServer中decimal(numeric )、float 和 real 数据类型的区别[转]
  10. Swing 100行画图示例
  11. c++之友元函数和友元类
  12. java计算集合交差并集
  13. 实验3:搜索算法求解8数码问题
  14. 如何在mysql验证非负数_MySQL数据库- 要求非负数
  15. 有机酸膜分离之柠檬酸生产应用反渗透技术
  16. hub75点屏(32扫)
  17. 说说jvm什么时候会回收垃圾
  18. 多媒体-用windows自带录音机录音(转载)
  19. Laragon 添加MongoDB服务
  20. 实验二 实现中点分割直线段裁剪算法

热门文章

  1. 对VC++一些常见问题的整理
  2. java容器分数0-9_2018.4.27 java容器
  3. 随想录(机器学习的生产应用)
  4. python模块的使用方法_python中requests模块的使用方法
  5. java1.8win7_JDK 1.8 安装配置教程(win7 64bit )
  6. speech开源框架_微软SAPI(The Microsoft Speech API):让你的软件能说会道
  7. mysql 5.7 安装_MySQL 5.7 的安装历程
  8. 安卓设置菊花动画_华为手机必须调整的4个默认设置,让手机流畅到飞起,用到2035年...
  9. Upload LABS Pass-8
  10. Oracle备份与还原(exp和imp),导出导入