|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
o% T; e9 O6 o0 r* z$ l我调试发现他是取得那个字段的地址。
7 C8 c0 G* g1 V大侠能详细解释一下吗?
- n" o1 @) F. h+ K+ p8 b1 J5 y; }: ~
这段是我Debug的用例。7 o" q! i& ?/ M. P, N0 v
( W$ v% J5 [4 `: P+ R& \. A#include "stdio.h"
$ M0 ^/ A; J. b- z* F9 z) A: H/ [#include "stdlib.h"
G3 D! r' v/ q% ]#include "string.h": \ E1 e1 ]3 `: M) }' r
+ {1 L! P7 G/ m# ~, [#define CHAR8 unsigned char
; I2 b0 K' D, B# V$ `; v! v# h9 @/ O4 r, C& I# |2 k" z8 I
typedef struct _tagjany
4 _5 j- ]( b7 _" P{- s* d! Q/ a% K- T+ n2 ]! Y; f+ f' \& P
char name[8];
( X1 \. B0 j Y5 }. `' i& t int age;
' M8 g- |- M) N$ \& i+ X7 w& q8 S}JANY, *PJANY;
% T) Z- M v& A/ b# C
' u+ _5 a( T4 g5 a( q Vtypedef struct _tagowen4 g8 j' t3 h `! B
{
# l5 G/ ~% Z# W5 n, A9 Q JANY jy;3 Q/ u, T0 g' g6 v" z! G" J: c7 n
char home[5];% h' ?& V: P- P
}OWEN, *POWEN;
8 Z4 I j! N5 K4 V8 |- M( L; }6 _6 ~
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"; {- Z% k1 N+ P" w) [8 |: M7 B
9 s# \* A% x' }# ~$ ^. U#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))5 H3 _- t! V4 |; c6 p6 }
# `+ W$ v/ p: J7 I4 f! S& K+ I0 X#define PEI_CR(Record, TYPE, Field, Signature) \* V* J9 g9 M' z. k3 ]; X3 L
_CR(Record, TYPE, Field) , n& _7 F, A4 f d1 c8 o
7 ~0 q4 o% b4 ~#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \$ v' ^) R; r4 D2 t6 e; X5 [& @
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE)); Z) u& ~4 W4 h- L# a4 M1 o
# ] {3 }# ?; ^9 f
void main()( ~/ o6 y9 F" F/ ^+ K6 D( t
{7 D) l4 V1 i8 Y
PJANY jany;
]. N6 Y% z+ C h$ M2 S POWEN owen;
* j3 ~3 i4 o9 ~$ O7 {" i jany = malloc(sizeof(JANY));" z0 {+ I+ I7 u' d
owen = malloc(sizeof(OWEN));
* {( P% N+ V$ n; V jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);4 ]& ~5 O8 F( C/ {0 _
free(owen);6 E( [8 f( }3 Z$ c7 z
free(jany);. W |# h7 @7 P: c" [
return; % [' l$ u" A0 D, a7 w, h) \$ B2 L6 D
} |
|