|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
% ^) n2 }4 W' H+ `/ N+ m. Y+ x我调试发现他是取得那个字段的地址。
3 s$ Y# W7 a1 \; f9 f; K) t0 d3 A9 A大侠能详细解释一下吗?
/ I5 ?/ o/ Y& z% H1 ]6 e% ^
3 c, S% j# o5 H& U. s4 i z这段是我Debug的用例。8 |' Q5 e. V/ ?3 R# N, J: j
* ]+ {) p6 o: W! ~#include "stdio.h"
& ~( k5 c2 q. n1 B C! @#include "stdlib.h"" r- j6 x8 f0 y6 @) ^6 {
#include "string.h" a9 {) h8 Q$ S L' W
) |0 R0 O/ W0 a7 L3 H- j1 Q) h
#define CHAR8 unsigned char
! l& |7 i8 |( |( v' n- V, [) k1 k- \" C
typedef struct _tagjany0 @( P/ S- d0 L) n1 C
{
8 @" W+ U6 m3 k char name[8];! h( A3 Y! U# T
int age;
, ]5 N' k' V( d, X9 Q8 e}JANY, *PJANY;
+ d, e8 r& B& V5 O. h( r" d: R
. b' S. X! n% ~typedef struct _tagowen& x5 w! m0 B1 E" }% N/ S9 {4 a5 k
{& Z- [9 D% N3 u* `3 A
JANY jy;4 Y3 {. h, S& N3 b% R9 f" m; `7 k
char home[5];
; C& N7 Q* s4 g" q) x}OWEN, *POWEN;
3 ?9 _ O% A, h% E8 ?) S
5 `% o) c, f2 [! M. C. \#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"' u2 g1 R" g, H( ^2 G- T1 N: P$ P3 W
4 a" H6 o# w% } B7 K1 |8 _# q' M
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field))): z9 b' O$ \& u* R6 \' ]' p* Q
; U& r4 J" K- I9 B0 q: c#define PEI_CR(Record, TYPE, Field, Signature) \; J: i; Q: u# v' T7 [
_CR(Record, TYPE, Field) . ^$ D9 X! J, T
j& m2 E1 `$ m4 m" c#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
- E3 g; S7 V' S/ z- ` (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
! e8 U/ g8 t2 r! j: e
1 K& L) z' L9 c- @% J1 h! rvoid main()3 q4 G* H1 p* M9 u
{( y4 z, t! H- F. V5 l6 M: Y, E
PJANY jany;
: w7 w$ q3 m0 p& u; e POWEN owen;
9 w& p9 g/ F8 J9 V jany = malloc(sizeof(JANY));# P6 g7 e" v" x- l* I
owen = malloc(sizeof(OWEN));6 j) i! ]; g7 @8 b1 R; S! ]
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
, ?' N# g* |' D/ G& Q, P free(owen);
0 E/ u C# P! r2 g# a free(jany);
( w+ E9 ?, ?7 s9 O return;
; \# Q3 L7 ^9 _& `} |
|