|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?+ L* ]$ u) l1 I+ z- n
我调试发现他是取得那个字段的地址。
`/ M) b8 }/ F! ?: D大侠能详细解释一下吗?
! `% x. {4 ^1 k0 N3 j' [2 J. c3 O4 y# [ {
这段是我Debug的用例。1 y/ H, ]" A H+ L
4 e2 A, J' Y* L8 D8 ~. p& F% j
#include "stdio.h"
2 ~: ?4 e4 e3 A3 s/ }5 z4 ~5 Y#include "stdlib.h"" ^7 C! j% _+ G
#include "string.h"
$ v2 r, ?: Z. o' u) J. W6 `( l1 l% ^+ \
#define CHAR8 unsigned char) k' h# e( T8 U' H' l0 H
|3 R; y- ?; f, N4 n+ d# e4 etypedef struct _tagjany
$ A( F3 e$ \% s, B1 g/ {: z" `8 B{
* t8 ~: i8 \( A! S8 I char name[8];: B, Z* {3 r4 Q7 \* \; z) M2 Z
int age;
: q$ y7 b9 T; b5 C- Q}JANY, *PJANY;
( q+ X4 U- W# o t+ v7 F# t$ o& C; d1 C1 O/ n: d, O
typedef struct _tagowen: ~* b2 W% ?. h& e. B
{' F5 `+ N7 C- L0 L! k
JANY jy;+ b, E, ~- }% ]: Z" r0 ^0 |, J8 @" |
char home[5];7 F5 Y4 e- F5 h4 U# |" {
}OWEN, *POWEN;
$ r) U8 i4 \+ x
- ?* W9 i0 ~# _) U9 j#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
0 F7 ?. ^5 a: w% w1 H) U' d" m. t$ v: g
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
$ m3 `& C/ L( E
/ c% a8 o7 c' i& I, A3 h4 u; E5 a; f#define PEI_CR(Record, TYPE, Field, Signature) \
9 h- ?* i+ Q8 `. R: N- Z" h _CR(Record, TYPE, Field)
% \* M+ J: @# c9 s9 R* W+ N% e, d0 i3 m1 d
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \, b" [& P8 O A. t( ?* L( Q
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
& O v: @& Y7 k. t7 K9 H Y a
4 H+ _* @ R8 g9 D& ?- ]void main()
9 Y, x! }# |! c, a7 {4 I{3 H7 O, b" g2 \( |! m4 ]
PJANY jany;
# b, {- M8 X. h POWEN owen;
: Q3 f" ?. B* o, p; V2 H! v jany = malloc(sizeof(JANY));! |0 G' T: {2 m, p
owen = malloc(sizeof(OWEN));2 F/ Z) f2 I# x: s5 J1 U
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
' |0 o" t* r+ k* @ free(owen);
- \/ R: `* |7 T' v+ F$ } free(jany);' _2 j6 a7 K. q. O! z' V
return;
5 E. s2 ?* z5 A) c6 a7 B' x} |
|