|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
. B9 @1 r% g4 E! F( l. p% r. R7 x- q我调试发现他是取得那个字段的地址。
1 h: p9 b& x. @大侠能详细解释一下吗?
# g- _4 H7 T* s' v6 `1 n$ U6 Z( Y( i& d9 y( _
这段是我Debug的用例。& f1 \3 [3 F% O/ T8 ^
, |3 }" H9 ]6 m/ ?
#include "stdio.h"
4 O8 O$ k- _, S' L#include "stdlib.h"8 W: r1 C+ u& v7 M4 [, l8 M1 \
#include "string.h"
; _1 I) z2 ?$ l1 C
( P9 N) j9 i$ @6 X% V2 e0 M( v#define CHAR8 unsigned char- k5 z% V$ O, f5 m2 p
. h9 |. |# F9 j5 ?3 E7 _) g) b0 ?typedef struct _tagjany
0 c- m2 Q) F+ h9 l' B* \" f( s" C# |; |{
' P7 E y4 ~, h) {7 { char name[8];/ o8 B- s' M- e, V4 K+ z
int age;
2 Q. @: d7 B: J4 c3 z) U5 k}JANY, *PJANY;7 [: t) i: ~0 W$ Y, _" \+ k5 I2 X
T' s) x; ^; l: X
typedef struct _tagowen
+ y; M2 h- ?$ s. w7 h# o{1 E/ K3 ^$ b2 A5 t: m
JANY jy;
7 _* V3 ]1 P( M- _# { char home[5];7 @+ A0 S8 H3 u5 q
}OWEN, *POWEN;
' I& D* a( J2 n- U$ ^
5 K: Z! Q. U' `) Y#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"/ K, c! H s" b6 Y' a, G
" C/ K5 a- k! b2 B: w4 n) N
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field))) M# `) L* T1 k4 z3 W7 o
" ~" Q! ]" h8 p# N5 J1 x( T
#define PEI_CR(Record, TYPE, Field, Signature) \
6 }$ [4 W6 T& {" Q# x _CR(Record, TYPE, Field)
4 m% y$ c$ b$ I
8 w5 z% Q+ T5 B: n#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
6 S+ J9 Y4 m% V9 y$ `" ^ (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))3 C, o8 d" i# h+ C& D) S' k' Z
' z1 z) l' O! b, Evoid main()
3 w& D% U- O4 E0 c. Z5 ]{
/ C9 M$ ]6 ?- m0 X PJANY jany;
5 _# Y( U3 j; Q+ S POWEN owen;' g, m0 S( @ i G- K* m2 v; V) f
jany = malloc(sizeof(JANY));% Y; `: l$ c5 d; R. s; s# b
owen = malloc(sizeof(OWEN));( }7 y$ K$ g% Q4 {4 {4 r! q% o
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
5 F! Y9 U0 _' I% m5 [, [% g0 U free(owen);
6 ]1 ?9 w1 O: Z6 w }& k7 T+ S free(jany); p/ D8 Z+ d* P
return; + A" A! @& f0 ~" |( L" W5 s- W6 P
} |
|