|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?9 g) r* s3 e' |1 e
我调试发现他是取得那个字段的地址。! s% n3 [5 h4 m
大侠能详细解释一下吗?# @- X" p: E, x: n; H- l
" }! H3 m; L" L# J1 {
这段是我Debug的用例。* F7 R( P, l+ a3 `! k% ~) h9 U
, X1 m# ?& P1 ~+ c#include "stdio.h"
/ f" S$ a1 P6 g) _7 f( a#include "stdlib.h"
! U# ` t- S' Z, O- \#include "string.h"
/ h. ^& ]8 i5 s( t7 d7 o4 X+ i$ j1 U9 N3 j0 f
#define CHAR8 unsigned char6 w% w, i8 ]" m( s: F# E
8 P& _- m# X/ Q" }8 ^2 q" Ltypedef struct _tagjany4 x4 S/ z: b) _& G1 s; i9 T7 C' K
{
' h0 [2 c4 i3 ` d9 w2 f char name[8];; V# `- Z1 B% w& b: E
int age;
3 u+ [3 @8 Q. ]: v' N( p* W" k/ [}JANY, *PJANY;5 { R, u+ W4 A1 ~7 g
: @" _! {( _8 Y& t' }
typedef struct _tagowen+ n1 ~* v- @" Y& i, z2 x/ W* |
{
3 b- }, w1 p) }' N: a, v JANY jy;/ J7 T& H* m3 C# q
char home[5];
1 B2 T, M0 M: S& [8 e( b% f}OWEN, *POWEN;
5 H+ } v8 @: Z& V" X; C. r
; `0 ^3 Y2 i& n) ^; f( y T#define PEI_CORE_HANDLE_SIGNATURE "owen.lu". `4 B! @, q7 e. l9 c
- m0 U* s) F/ _% f2 \#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
6 P5 F+ G N6 }% ^
: \! t* j9 U# X5 \; i5 Y#define PEI_CR(Record, TYPE, Field, Signature) \
* N5 W4 c; Y+ Z. T- z _CR(Record, TYPE, Field)
7 d% a( Q! ^) g- ?( B. ]. ?
3 Z# R) {& P) E. r5 U' J#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
/ s( Y$ T7 A* m) c- w3 z% K- ] (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
, Q; z2 D% l8 w( D4 _. j
# @1 E" @! f$ K- x5 U# ^void main()
% u4 v3 {( ^6 G0 [{
0 ^# Y0 \0 R' t4 |) z' V, {5 M PJANY jany;3 a1 }: v- n3 {8 @7 K9 \
POWEN owen;
3 l# T1 D6 V t+ ^& p1 f. i jany = malloc(sizeof(JANY));
( i t0 V Q% O1 ] owen = malloc(sizeof(OWEN));
) G2 @0 m |) a jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
, t8 e9 o( V6 ` free(owen);
& M% q |5 u+ W) e free(jany);
) S" M! X0 O9 Q. J8 i return;
5 o0 w' A. e: h9 T, }} |
|