宏的问题!! ( 积分: 50 )

  • 主题发起人 主题发起人 grabber
  • 开始时间 开始时间
G

grabber

Unregistered / Unconfirmed
GUEST, unregistred user!
#ifdef _DEBUG
#define ASSERT(bool_expression) if (!(bool_expression)) abort_program(__FILE__, __LINE__, #bool_expression)
#define IS_VALID(obj) ASSERT((obj) != NULL &&amp
(obj)->IsValid())
#define REQUIRE(bool_expression) ASSERT(bool_expression)
#define ENSURE(bool_expression) ASSERT(bool_expression)

#else

#define ASSERT(ignore) ((void) 0)
#define IS_VALID(ignore) ((void) 0)
#define REQUIRE(ignore) ((void) 0)
#define ENSURE(ignore) ((void) 0)

#endif
像这种类似的宏如何在Delphi中实现?!
 
#ifdef _DEBUG
#define ASSERT(bool_expression) if (!(bool_expression)) abort_program(__FILE__, __LINE__, #bool_expression)
#define IS_VALID(obj) ASSERT((obj) != NULL &&amp
(obj)->IsValid())
#define REQUIRE(bool_expression) ASSERT(bool_expression)
#define ENSURE(bool_expression) ASSERT(bool_expression)

#else

#define ASSERT(ignore) ((void) 0)
#define IS_VALID(ignore) ((void) 0)
#define REQUIRE(ignore) ((void) 0)
#define ENSURE(ignore) ((void) 0)

#endif
像这种类似的宏如何在Delphi中实现?!
 
delphi里好象只有条件编译没有宏的。
 
是啊,Delphi是没有,我的意思是如何在Delphi实现类似的功能啊!
 
编译指令
$IFDEF MSWINDOWS}
if not ReadFile(THandle(Handle), Buffer, Count, LongWord(Result), nil) then
Result := -1;
{$ENDIF}
{$IFDEF LINUX}
Result := __read(Handle, Buffer, Count);
{$ENDIF}
 
可爱小猪 可能没理解我的意思;不过还是谢谢你!!:)
按照一楼的定义,假设程序中有Assert()函数调用,当_Debug被定义时,程序执行一段代码(if (!(bool_expression)) abort_program(__FILE__, __LINE__, #bool_expression)
);如果没定义则为空操作;
可爱小猪的意思也许这样(希望没理解错,呵呵,我开始也是这样做的!;)):
procedure Assert();
begin
{IFDEF _DEBUG}
//执行需要的代码;
{ENDIF}
{IFNDEF _DEBUG}
//无代码,空操作;
{ENDIF}
end;
这样虽然能完成类似的功能,但是有一个问题:当程序中调用Assert时,如果_DEBUG没定义,VC++中则没有执行任何东西,在DELPHI中则会调用一个空函数,影响性能;
 
后退
顶部