|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
, D6 I6 Z! v/ a! u, _/ e我调试发现他是取得那个字段的地址。
% N5 a4 O* H! q/ ]% J; o. K大侠能详细解释一下吗?
9 M2 b+ j5 p+ \1 ^
+ S1 F! b& x1 C4 O5 K这段是我Debug的用例。
5 A6 f1 V6 e9 y1 N# X% d
. S' M: B5 W7 R; }2 }8 q#include "stdio.h"' s7 ?( n. P+ k" ]% h% V( @7 I+ I! p6 w
#include "stdlib.h"& n `$ }3 O2 b" I0 O; ?
#include "string.h"* E, B4 A. q8 |
1 \: b% J3 K/ Q }
#define CHAR8 unsigned char
& n8 n, c% m- i a+ _. [2 y7 G2 s6 q! r1 `
typedef struct _tagjany, S0 a+ h9 a) o& @0 k; k6 h& p
{. e h& u7 ^* p4 k; Y: q
char name[8];
4 {' ]- n$ [9 d) D- k int age;$ P. \$ [. E7 u
}JANY, *PJANY;% u. n8 y$ u3 {& ]6 F ^
: c+ |9 ~, n) U+ _4 m2 Dtypedef struct _tagowen3 |+ O/ T9 c9 T) m5 t4 z: W4 D
{6 H4 z: r' ~) T* M; e* s
JANY jy;/ |; G/ ]5 e$ L0 ^
char home[5];" l0 q3 |. j# _4 J9 Y
}OWEN, *POWEN;5 y- K& B4 S! Y" r7 a+ j6 U' I
. R* M w1 H# W. X
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
# H# S( n3 k3 t6 c( K* d! m" ]
0 \8 n0 E4 p$ S# Y; y#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
1 E3 I/ ?1 i4 d- o' k! ~) }6 Q: j1 A, ~1 b
#define PEI_CR(Record, TYPE, Field, Signature) \! M. s/ o, E: Y8 H
_CR(Record, TYPE, Field)
* h7 {) n2 m- q1 n( V3 s- z8 k; S- }" e+ s& F$ x
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \' M- i+ T) { q8 w0 P8 A
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
6 @; T* b, ~: \. [6 ^1 Z1 @
4 { C2 f1 {, jvoid main(), }+ W" h+ u& S* ]/ B$ Y4 m
{
; j2 N6 o6 J* N# R c& ^# i% u; D( D PJANY jany;1 e4 i0 V# m5 f' d, x* D
POWEN owen;4 _& v7 d! s* H& S: d' ^- ?6 R
jany = malloc(sizeof(JANY));
) v7 ^. A; M9 N) b5 H, s- V owen = malloc(sizeof(OWEN));
, x7 X% M9 N' a9 k jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
/ |9 l; @. T. A' P free(owen);
7 n5 ]) T9 A) g free(jany);# M2 c% A. K2 y2 H; x: l3 a
return; / t2 K1 i% O: _" D L; [: d
} |
|