#define的一个精妙用途,用来标记起始和结束

在NTP项目中,NTP.h中,

#ifdef AUTOKEY #define clear_to_zero opcode u_int32 opcode; /* last request opcode */ associd_t assoc; /* peer association ID */ u_int32 crypto; /* peer status word */ EVP_PKEY *pkey; /* public key */ const EVP_MD *digest; /* message digest algorithm */ char *subject; /* certificate subject name */ char *issuer; /* certificate issuer name */ struct cert_info *xinfo; /* issuer certificate */ keyid_t pkeyid; /* previous key ID */ keyid_t hcookie; /* host cookie */ keyid_t pcookie; /* peer cookie */ const struct pkey_info *ident_pkey; /* identity key */ BIGNUM *iffval; /* identity challenge (IFF, GQ, MV) */ const BIGNUM *grpkey; /* identity challenge key (GQ) */ struct value cookval; /* receive cookie values */ struct value recval; /* receive autokey values */ struct exten *cmmd; /* extension pointer */ u_long refresh; /* next refresh epoch */ /* * Variables used by authenticated server */ keyid_t *keylist; /* session key ID list */ int keynumber; /* current key number */ struct value encrypt; /* send encrypt values */ struct value sndval; /* send autokey values */ #else /* !AUTOKEY follows */ #define clear_to_zero status #endif /* !AUTOKEY */ /* * Ephemeral state variables */ u_char status; /* peer status */ u_char new_status; /* under-construction status */ u_char reach; /* reachability register */ int flash; /* protocol error test tally bits */ u_long epoch; /* reference epoch */ int burst; /* packets remaining in burst */ int retry; /* retry counter */ int flip; /* interleave mode control */ int filter_nextpt; /* index into filter shift register */ double filter_delay[NTP_SHIFT]; /* delay shift register */ double filter_offset[NTP_SHIFT]; /* offset shift register */ double filter_disp[NTP_SHIFT]; /* dispersion shift register */ u_long filter_epoch[NTP_SHIFT]; /* epoch shift register */ u_char filter_order[NTP_SHIFT]; /* filter sort index */ l_fp rec; /* receive time stamp */ l_fp xmt; /* transmit time stamp */ l_fp dst; /* destination timestamp */ l_fp aorg; /* origin timestamp */ l_fp borg; /* alternate origin timestamp */ double offset; /* peer clock offset */ double delay; /* peer roundtrip delay */ double jitter; /* peer jitter (squares) */ double disp; /* peer dispersion */ double xleave; /* interleave delay */ double bias; /* programmed offset bias */ /* * Variables used to correct for packet length and asymmetry. */ double t21; /* outbound packet delay */ int t21_bytes; /* outbound packet length */ int t21_last; /* last outbound packet length */ double r21; /* outbound data rate */ double t34; /* inbound packet delay */ int t34_bytes; /* inbound packet length */ double r34; /* inbound data rate */ /* * End of clear-to-zero area */ u_long update; /* receive epoch */ #define end_clear_to_zero update

用两个个#define来标记 结尾 和 开始, 以后用的时候直接用这两个宏,相减便可以得到大小。

#define CLEAR_TO_ZERO(p) ((char *)&((p)->clear_to_zero)) #define END_CLEAR_TO_ZERO(p) ((char *)&((p)->end_clear_to_zero)) #define LEN_CLEAR_TO_ZERO (END_CLEAR_TO_ZERO((struct peer *)0) \ - CLEAR_TO_ZERO((struct peer *)0)) #define CRYPTO_TO_ZERO(p) ((char *)&((p)->clear_to_zero)) #define END_CRYPTO_TO_ZERO(p) ((char *)&((p)->end_clear_to_zero)) #define LEN_CRYPTO_TO_ZERO (END_CRYPTO_TO_ZERO((struct peer *)0) \ - CRYPTO_TO_ZERO((struct peer *)0))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值