在项目dof和cfg文件中,它们是一些未记录的开关:E,F,K,N和S.它们在使用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 +,Z 1}
有人可以获得有关其含义的任何信息吗?
答案 0 :(得分:1)
解决这些“未记录的”的简单方法是从命令行运行DCC32.exe,您将看到您的版本的Delphi可用的所有编译器选项。多年来,一些开关已经改变。
Turbo Pascal/Borland Pascal:
Compiler switches: -$<letter><state> (defaults are shown below)
A+ Word alignment I+ I/O error checking R- Range checking
B- Full boolean eval L+ Local debug symbols **S+ Stack checking**
D+ Debug information **N- 80x87 instructions** T- Typed pointers
**E+ 80x87 emulation** O- Overlays allowed V+ Strict var-strings
**F- Force FAR calls** P- Open string params X+ Extended syntax
G- 80286 instructions Q- Overflow checking
Memory sizes: -$M<stack>,<heapmin>,<heapmax> (default: 16384,0,655360)
我仍然在Pascal中编译,所以我认识到这些...... $ K不是来自Turbo Pascal时代,也不是Free Pascal,也不是Delphi 7或更早版本。 (我不比D7更新 - 所以也许是CodeGear或Embarcadero版本?
答案 1 :(得分:1)
注意:{$ N}和{$ E}是成对处理的。
{$ F-} =强制远距离调用(仅Turbo Pascal / Borland Pascal和Delphi 1(16位);在较新的Delphis中不执行任何操作)
{$ K-}智能回调
{$ S-} =堆栈检查。 如果{$ S +},则在每个过程/函数的开始处插入对堆栈检查例程的调用,以检查是否可以在堆栈上保留用于局部变量的空间。如果堆栈中没有足够的空间用于局部变量,则导致EStackOverflow(如果已使用SysUtils)或终止于运行时错误(如果未使用SysUtils)。
{$ N +}和{$ E-}: 这些用于Turbo Pascal。 (可能还有Delphi 1吗?) 在较新的Delphis中,没有使用它们,但是请参阅Real48类型和{$ REALCOMPATIBILITY}指令。
{$ N-,E +}毫无意义,被视为{$ N-,E-}或导致编译错误。
{$ N-,E-}实数类型是6字节(= 48位)的软件实数。不使用数学协处理器(即使存在)。
{$ N +,E +}实数类型是8字节的数学协处理器实数(IEEE实数),与Delphi中的Double相同。将使用数学协处理器(如果存在),否则将通过软件进行仿真(速度较慢,但产生的结果与数学协处理器相同)。
{$ N +,E-}实数类型是8字节的数学协处理器实数(IEEE实数),与Delphi中的Double相同。数学协处理器必须在运行时存在,否则程序会立即退出,并显示运行时错误“需要数学协处理器,但不存在”。
最近的Windows版本无法在如此旧的CPU上运行,以至于它没有内置的浮点单元,因此{$ N +}和{$ E-}现在变得毫无意义。
答案 2 :(得分:0)
您列出的大多数指令都记录在Embarcadero的DocWiki:
中{$ A8} =将记录字段与QuadWord对齐
对齐{$ B-} =启用布尔短路评估
{$ C +} =启用断言
{$ D +} =启用调试信息
{$ E-} =?
{$ F-} =?
{$ G +} =启用导入的数据引用
{$ H +} =启用长字符串(将String
类型设置为AnsiString
) - 在现代Delphi版本中忽略
{$ I +} =启用I / O过程检查
{$ J-} =禁用可写常量
{$ K-} =?
{$ L +} =启用本地符号信息
{$ M-} =禁用运行时类型信息
{$ N +} =?
{$ O +} =启用代码优化
{$ P +} =启用打开字符串参数 - 在现代Delphi版本中忽略
{$ Q-} =禁用溢出检查
{$ R-} =禁用范围检查
{$ S-} =?
{$ T-} =禁用类型检查指针
{$ U-} =禁用奔腾安全的浮点除法运算
{$ V +} =启用严格检查短字符串参数
{$ W-} =仅在需要时生成堆栈帧
{$ X +} =启用扩展语言语法
{$ Y +} =生成符号交叉引用信息
{$ Z1} =将最小枚举大小设置为1个字节
正如您所看到的,自Delphi 7发布15年后,您所询问的5个特定开关仍然没有记录。所以不知道他们实际上做了什么,如果有的话。