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

时间:2012-01-17 11:10:46

标签: delphi compiler-construction delphi-7

我正在使用 delphi 7 进行应用程序,我刚刚遇到了这个

   {$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.  

我知道有Compiler DirectiveDelphi Compiler Directives list

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

任何人都可以告诉我

  1. 在单位名称之前使用指令是什么意思,这是否使它们成为全球性的?
  2. 我们可以在某些特定情况下创建自己的指令吗?
  3. 在哪里定义了编译器指令?

2 个答案:

答案 0 :(得分:7)

关于指令是否对整个项目有效,整个单元,单个函数和具有函数的区域,从指令到指令各不相同。您必须阅读每个指令的文档,以了解其范围。

您询问是否需要将它们放在设备的开头。您需要考虑该指令的范围。 documentation的另一部分有关切换指令的说法:

  

Switch指令是全局的或本地的:

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

但是,请考虑DENYPACKAGEUNIT指令(强调我的):

  

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

如果此指令具有单位范围的范围,那么它只需要存在于单位中即可生效。

因此,指令的位置可能很重要。最重要的是,对于每个指令,您需要知道其范围,为此,您必须查阅该指令的文档。

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


您提供的代码中似乎发生的是作者键入 CTRL + O O 并且IDE插入了项目选项中定义的各种设置那个瞬间。

答案 1 :(得分:4)

  
      
  1. 在单位名称之前使用指令是什么意思,这是否使它们成为全球性的?
  2.   

如果全球范围内的意思是整个项目范围,那么答案是否定的。每个单元都是自己编译的。

  
      
  1. 我们可以在某些特定情况下创建自己的指令吗?
  2.   

它们被称为编译器指令,因为编译器会解释它们。除非您在Embarcadero并且更改了编译器,否则无法创建自己的指令。

  
      
  1. 在哪里定义了编译器指令?
  2.   

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