考虑下面的联合声明:
1 union ele {
2 struct {
3 long *p;
4 long y;
5 }e1;
6 struct [
7 long x;
8 union ele *next;
9 } e2;
10 };
这个声明说明联合中可以嵌套结构。
下面的函数(省略了一些表达式)对一个链表进行操作,链表是以上述联合作为元素的:
1 void proc (union ele *up) {
2 up-> () = *()-();
3 }
A. 下列字段的偏移量是多少(以字节为单位):
el .p ()
el. y ()
e2.x ()
e2.next () B. 这个结构总共需要多少个字节?
C. 编译器为proc产生下面的汇编代码:
proc: movq 8(%rdi),%rax movq (%rax),%rdx movq (%rax),%rdx subq 8(%rax),%rdx movq %rdx,(%rdi) ret
在这些信息的基础上,填写proc代码中缺失的表达式。提示:有些联合引用的解释可以有歧义。当你清楚引用指引到哪里的时候,就能够澄清这些歧义。只有一个答案,不需要进行强制类型转换,且不违反任何类型限制。
