|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
8 `$ e! V: J. l我调试发现他是取得那个字段的地址。8 [0 n! ~ `0 S/ A* D2 n3 ?8 W
大侠能详细解释一下吗?. c- M& j( Y/ ]8 U1 g; s! T. @
! |* r' W3 R+ S/ z这段是我Debug的用例。 \: X, {5 g; ^+ @" Z
6 g5 ]( J! H3 N! M6 u7 q9 d#include "stdio.h"/ S% N6 W, c2 e8 g& Z. P
#include "stdlib.h"
- c4 |+ X! k0 M#include "string.h"" ]! }. M! s4 A/ z, z8 c
1 t& i8 J) p+ Z
#define CHAR8 unsigned char* @6 T2 j* H; h# f. o! m2 o
& ]$ K/ ?/ }& d7 t
typedef struct _tagjany
2 l$ y- Y( |# E# E8 `, v, B, @7 C& `{
; O: Q- `% ?( Z# ~' Z char name[8];# Y: u4 t; w+ h7 t1 c/ E6 ^ p5 g
int age;
( v/ Y! m+ J w: t}JANY, *PJANY;: q0 z" P/ G1 O' f K! c( Q
5 ?9 U4 r$ J4 D# d9 g0 t
typedef struct _tagowen) P6 z S" E% b
{/ n! x3 ?! Q: Y; `
JANY jy;
5 c7 X3 v: S& d9 D char home[5];" k& K5 W8 K. ^/ U( i6 R) c5 z1 Y. U
}OWEN, *POWEN;
! d% e0 y$ `, w- d4 N2 H4 m7 o% F( _! u* \( N1 ^! r7 L3 A: C( m
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"7 z% {& w5 u4 k& Y" G9 ]
! g; B0 ~9 \7 I# S7 e#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))7 r9 l, S& f0 I, Y' x
" h+ s4 w1 p' J& _#define PEI_CR(Record, TYPE, Field, Signature) \2 _+ c% U8 F1 c# D
_CR(Record, TYPE, Field) % l% {/ G0 N4 f
# s( N* [" p, D$ f# J, N2 w4 }#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
$ L! g& H' f V4 b (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE)): N* i8 ?5 L" ~5 ]5 k) K; |% M2 V
# X% W" n% r3 v( zvoid main()+ ^" v# m& q% C$ ^
{
2 v2 |7 ^9 A- Y+ [# F7 [, v PJANY jany;
; |+ B1 y3 i6 i1 Z J' t POWEN owen;* t* H$ z4 L* B# k; h
jany = malloc(sizeof(JANY));+ W% w7 W+ z, w0 b
owen = malloc(sizeof(OWEN));
( B7 Y+ U. ^* I$ V1 D jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);0 j7 j7 {+ ?. c5 [7 [
free(owen);" X+ F( h2 Z; }, s
free(jany);, @. l# n; {$ q- \
return; + T, U8 O$ D6 r
} |
|