考虑下面的联合声明:
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代码中缺失的表达式。提示:有些联合引用的解释可以有歧义。当你清楚引用指引到哪里的时候,就能够澄清这些歧义。只有一个答案,不需要进行强制类型转换,且不违反任何类型限制。