說明:1. ot表示exp==true時執行,of表示exp==false時執行
2. nok表示exp!=m_nok時執行
3. m_nok和m_nerr都屬於err_class類
4. 巨集的第乙個引數是表示式exp,如果有第二個引數的話,第二個引數為retval,用來做返回值
表1 macros.h巨集定義梳理表
說明**示意
形式不判斷,直接執行
判斷表示式true或false
判斷表示式是否等於m_nok
先assert(0),再返回m_nerr
assert(0);
return m_nerr;
r*rerr
rof,rot
rnok
沒有assert(0),直接返回m_nerr
return m_nerr;
r*srerrs
rofs,rots
rnoks
先assert(0),再返回指定值(巨集的第二個引數)
assert(0);
return retval;
r*rrval
rofr,rotr
rnokr
沒有assert(0),返回指定值(巨集的第二個引數)
return retval;
r*rs
無rofrs,rotrs
rnoks
先assert(0),再返回void
assert(0);
return;
r*v無
rofv,rotv
rnokv
沒有assert(0),返回void
return;
r*vs
無 rofvs,rotvs
rnokvs
assert(0),不返回任何值
assert(0);
a*af
aof,aot
anok
rerr、rerrs、rval、af的定義:
#define rerr( ) \
assert( 0 ); \
return err_class::m_nerr; \
#define rerrs( ) \
return err_class::m_nerr; \
#define rval( retval ) \
assert( 0 ); \
return retval; \
#define af( ) \
assert( 0 ); \
其他定義
#if defined( _debug ) || defined( debug )
#define check( exp ) assert( exp )
#define aot_dbg( exp ) aot( exp )
#define aof_dbg( exp ) aof( exp )
#define anok_dbg( exp ) anok( exp )
#define do_dbg( exp ) ( exp )
#else // _debug
#define check( exp ) ((void_type)( exp ))
#define aot_dbg( exp ) ((void_type)0)
#define aof_dbg( exp ) ((void_type)0)
#define anok_dbg( exp ) ((void_type)0)
#define do_dbg( exp ) ((void_type)0)
#endif // _debug
#if !defined( assert )
#define assert assert
#endif
#define void_type void
#define err_class err
#define err_val errval
JMVC中TZSearch演算法的過程
1.找到一些 的運動向量,包括用中值 得來的運動向量,還有在這個中值 得來的運動向量所指向的巨集塊的左邊,上邊和右上位置的巨集塊的運動向量,以及 0,0 這個運動向量。從這些運動向量指向的點中找到具有最小匹配誤差的點作為搜尋起點 搜尋中心 2.在找到的搜尋起點上依次用不同的步長x去執行diamond...
ABAP 中的巨集
report zcp saptest2 data result type i,int1 type i value 1,int2 type i value 2.define operation.result 1 2 3.output 1 2 3 result.end of definition.def...
swift中的巨集
swift本身不支援巨集定義,因此相關的操作採用的是常量代替 1.建立乙個swift檔案專門用於存放代替巨集的常量 2.常量 巨集定義 let screen height uiscreen.mainscreen bounds height let screen width uiscreen.main...