首页 > 试题广场 >

假设给你个任务,检查一下C编译器为结构和联合的访问产生正确的

[问答题]

假设给你个任务,检查一下C编译器为结构和联合的访问产生正确的代码。你写了下面的结构声明:

typedef union {
  struct {
    long u; 
    short v; 
    char w;
  } tl;
  struct {
    int a [2]; 
    char *p;
  } t2;
} u.type;

你写了一组具有下面这种形式的函数:

void get (u_type *up,type *dest) {
*dest =expr;
}

这组函数有不一样的访问表达式expr,而且根据expr的类型来设置目的数据类型^扣。 然后再检查编译这些函数时产生的代码,看看它们是否与你预期的一样。

假设在这些函数中,up和dest分别被加载到寄存器%rdi *%rsi中。填写下表中的数据类型^批,并用1〜3条指令序列来计算表达式,并将结果存储到dest中。


这道题你会答吗?花几分钟告诉大家答案吧!