Delphi编译器指令列表,我们是否必须将指令放在单元名称之前?

Delphi编译器指令列表,我们是否必须将指令放在单元名称之前?,delphi,compiler-construction,delphi-7,Delphi,Compiler Construction,Delphi 7,我正在使用Delphi7开发应用程序,我刚刚遇到了这个问题 {$A+,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} unit fmMain; // this is the ma

我正在使用Delphi7开发应用程序,我刚刚遇到了这个问题

   {$A+,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}

   unit fmMain; // this is the main form of the project

   interface

   uses
     //..all the code is here
   end.  
我知道有这些和

代码的作者将如此多的编译器指令放在主单元名称之前

有人能告诉我吗

  • 在单元名称之前有指令有什么用,这会使它们成为全局的吗
  • 在某些特定情况下,我们能否创建自己的指令
  • 编译器指令在哪里定义
    • 解释这些原则的关键主题如下:
    • 此处列出了编译器指令:
    至于该指令是否对整个项目、整个单元、单个功能和具有功能的区域具有影响,这因指令而异。您必须阅读每个指令的文档以了解其范围

    您询问是否需要将它们放置在单元的开头。您需要考虑指令的范围。本手册的另一部分是关于开关指令的:

    开关指令可以是全局指令,也可以是本地指令:

    • 全局指令影响整个编译,必须出现在程序或正在编译的单元的声明部分之前
    • 本地指令仅影响从指令扩展到下一个相同指令出现的编译部分。它们可以出现在任何地方

    但是,考虑指令(强调矿山):

    {$DENYPACKAGEUNIT ON}
    指令防止将它出现的Delphi单元放入包中

    如果本指令的适用范围为装置范围,则只需在装置中出现即可生效

    因此,指令放置在何处可能很重要。底线是,对于每个指令,您需要了解其范围,为此,您必须查阅该指令的文档

    请注意,如果希望更改项目设置中的设置,则只需要在代码中设置指令。在项目选项中设置选项而不是在代码中设置它们是完全合理的


    在您展示的代码中似乎发生了这样的情况:作者键入了CTRL+O,IDE插入了项目选项中定义的各种设置

  • 在单元名称之前有指令有什么用,这会使它们成为全局的吗
  • 如果您所说的“全局”是指整个项目,那么答案是否定的。每个单元都是独立编译的

  • 在某些特定情况下,我们能否创建自己的指令
  • 它们被称为编译器指令,因为编译器解释它们。除非您在Embarcadero并更改编译器,否则无法创建自己的指令

  • 编译器指令在哪里定义

  • 它们在编译器的源代码中定义。它们记录在编译器文档中,您已经找到了一个栅格链接(您的第二个链接)

    +1,我想作者按了,cntrl+o,正如您所说..指令列在顶部,为什么delphi会列出所有这些指令?这正是CTRL+o所做的。好的,如果我定义它们,单元指令将接管。。您的意思是
    project->Options->compiler
    设置将被忽略,并且将使用代码中设置的设置吗?没错,代码中指定的指令将覆盖项目选项设置。你真的应该阅读我答案中的第一个链接。我只是做了,学到了很多我不知道的东西@普莱迪亚斯可以,但你应该总是在上留下
    $提示+1,我的意思是全局范围内的项目范围,所以对于每个单元,我需要有我需要的指令。不,你可以在项目设置中定义它们。单位中的定义会覆盖项目设置,如果单位中没有定义,则以项目中的设置为准。作者只是无意中点击了Ctrl+O,O