gpt4 book ai didi

c - 此 C 代码的哪一部分缺失或需要更改?

转载 作者:太空狗 更新时间:2023-10-29 17:00:37 26 4
gpt4 key购买 nike

对于我的作业,我必须填写下面 C 代码的缺失部分。但是,我不确定缺少哪些部分或必须填写哪些部分。我有一个该代码将生成的示例汇编代码,但不知道我必须更改哪些部分才能获得预期结果。我只是在寻求澄清。

typedef enum {MODE_A, MODE_B, MODE_C, MODE_D, MODE_E} mode_t;
long switch3 (long *p1, long *p2, mode_t action) {
long result = 0;
switch(action){
case MODE_A:
case MODE_B:
case MODE_C:
case MODE_D:
case MODE_E:
default;
}
return result;
}

其他要点:

  • 可能有些情况应该用C写具有穿透性的代码
  • 代码显示了开关中枚举类型值的分支陈述。 (问题:简单来说,这到底是什么意思?我的教授提供了一个我不理解的复杂定义。)

汇编代码结果示例:

# p1 in %rdi, p2 in %rsi, action in %edx
.L2: # MODE_E
movl $27, %eax
ret
.L7: # MODE_A
movl (%rsi), %rax
movq (%rdi), %rdx
movq %rdx, (%rsi)
ret
.L5: # MODE_B
movq (%rdi), %rax
addq (%rsi), %rax
movq %rax, (%rdi)
ret
.L4: # MODE_C
movq $59, (%rdi)
movq (%rsi), %rax
ret
.L3: # MODE_D
movq (%rsi), %rax
movq %rax, (%rdi)
movl $27, %eax
ret
.L8: # default
movl $12, %eax
ret

最佳答案

因为这是一项作业,所以我不会给你代码。但这里有关于这两点的澄清。

一个 switch() 案例可以通常被看作像这样的一个 block :

if(myvar == ...){
//branch1
} else if(myvar == ...){
//branch2
}
...

每个 if 都是一个分支,在您的情况下,每个分支条件都取决于一个枚举值。这应该回答 在 switch 语句中对枚举类型值进行分支 的问题。

我写“通常”是因为,事实上 switch case 更像是一个 asm jump if equals。所以一旦它到达正确的case,下面的所有代码都会被执行,甚至是下一个case语句中的代码。您必须通过以编程方式停止 switch block 来处理此问题(您要么中断它,要么返回)。这是针对 fall-through 点。

您可以找到很多网站来解释 switch case 的工作原理。

现在您必须用正确的实现来填充每个case——它似乎是排列。

关于c - 此 C 代码的哪一部分缺失或需要更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36326464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com