Delphi的条件编译是否允许定义的符号包含值?
在Delphi中,您可以定义符号,就像在C/C++中一样.
德尔福: {$DEFINE MY_SYMBOL} C/C++: #define MY_SYMBOL 这允许您检查是否使用Delphi中的{$IFDEF MY_SYMBOL}或C/C++中的#ifdef MY_SYMBOL来定义符号. 这是一个布尔值 – 符号是在预处理期间定义的.但是,C/C++还允许您为预处理器符号赋值.例如.: #ifdef DEBUG #define DB_HOST "127.0.0.1" #else #define DB_HOST "123.456.789.123" #endif Database *pDatabase = new Database(DB_HOST); 是否可以在Delphi中为预处理器符号赋值,或者Delphi是否仅允许您确定是否已定义符号? 编辑:由于Delphi不支持预处理器中的符号值,我假设它不支持预处理器宏.我在这个假设中是对的吗? 例如,在C中,您可以定义一个预处理器宏,在编译之前将其与适当的参数一起复制和粘贴.当您希望“内联函数”功能用于快速操作(例如,二进制逻辑,在整数值中测试,位移等)而没有堆栈帧的开销,参数传递等时,这是有用的. #define OK_FLAG 0x00000001 #define OK(f) (f & OK_FLAG) #define WEAK_XOR_CIPHER(v) (v ^ 0xff) 解决方法
您可以简单地使用常量,并定义值:
const {$IFDEF DEBUG} DB_Host = '127.0.0.1'; {$ELSE} DB_Host = '123.45.67.89'; {$ENDIF} 你也可以反过来(测试未定义的东西): const {$IFNDEF DEBUG} DB_Host = '123.45.67.89'; {$ELSE} DB_Host = '127.0.0.1'; {$ENDIF} 这可确保DB_Host始终可用,并在不调试时具有适当的值. 最新版本的Delphi允许您测试常量的值.例如,系统单元定义了常量RTLVersion,您可以使用它测试一个值: {$IF RTLVersion <= 26} // Less than XE5 {$ELSE} // XE5 {$IFEND} 但是,Delphi不支持任何类型的宏.没有宏的典型解决方案是使用内联函数.例如,请参阅Windows单元的WinAPI RGB宏实现: function RGB(r,g,b: Byte): COLORREF; inline; function RGB(r,b: Byte): COLORREF; begin Result := (r or (g shl 8) or (b shl 16)); end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |