Список директив компилятора Delphi, нужно ли размещать директивы перед именем модуля? - PullRequest
4 голосов
/ 17 января 2012

я работаю над приложением, используя 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.  

Я знаю, что есть Директива компилятора и DelphiСписок директив компилятора

автор кода поместил так много директив компилятора перед именем основного блока.

любой может сказать мне

  1. Какая польза от наличия Директив перед именем модуля, делает ли это их глобальными?
  2. И можем ли мы создавать свои собственные директивы в некоторых конкретных ситуациях?
  3. Где определены директивы компилятора?

Ответы [ 2 ]

7 голосов
/ 17 января 2012

Относительно того, влияет ли директива на весь проект, на весь блок, одну функцию и область с функцией, которая варьируется от директивы к директиве. Вы должны прочитать документацию для каждой директивы, чтобы знать, какова ее область действия.

Вы спрашиваете, нужно ли их размещать прямо в начале блока. Вы должны принять во внимание сферу действия директивы. В другой части документации говорится о директивах switch:

Директивы Switch являются глобальными или локальными:

  • Глобальные директивы влияют на всю компиляцию и должны появляться перед декларируемой частью программы или компилируемым модулем.
  • Локальные директивы влияют только на часть компиляции, которая простирается от директивы до следующего появления той же директивы. Они могут появиться где угодно.

Однако рассмотрим директиву DENYPACKAGEUNIT (выделено мной):

Директива {$DENYPACKAGEUNIT ON} запрещает помещать в пакет устройство Delphi , в котором он выглядит .

Если эта директива имеет охват всей единицы, то она просто должна присутствовать в единице для вступления в силу.

Так что может иметь значение, где находится директива. Суть в том, что для каждой директивы вам необходимо знать ее область действия, и для этого вы должны обратиться к документации по этой директиве.

Обратите внимание, что вам нужно устанавливать директивы в коде, только если вы хотите изменить настройки, сделанные в настройках проекта. Вполне разумно устанавливать параметры в настройках проекта, а не устанавливать их в коде.


В коде, который вы представляете, произошло то, что автор набрал CTRL + O O , и в среду IDE были вставлены различные параметры, определенные в параметрах проекта, в этот момент. во времени.

4 голосов
/ 17 января 2012
  1. Какая польза от наличия Директив перед именем устройства, делает ли это их глобальными?

Если под глобальным вы подразумеваете весь проект, ответ НЕТ. Каждый модуль компилируется самостоятельно.

  1. И можем ли мы создавать свои собственные директивы в некоторых конкретных ситуациях?

Они называются директивами компилятора, потому что компилятор их интерпретирует. Вы не можете создавать свои собственные директивы, если не находитесь в Embarcadero и не изменили компилятор.

  1. где определены директивы компилятора?

Они определены в источниках компилятора. Они задокументированы в документации компилятора, и вы уже нашли отличную ссылку (ваша вторая ссылка)

...