c - 如何用 goto 翻译 if .. else 语句?
问题描述
我必须将嵌套的 if..else 条件转换为 C 代码中的 goto 标签。我知道我必须从外部 if-s 开始,但是如何用 goto 翻译内部 if-s?
Example: if(condition)
{
if(condition)
{
if(condition)
{
statements;
}
if(condition) return;
statements;
}
}
else statements;
解决方案
实际上,您不需要翻译Ìf statement
或任何属于C
. 你可以这样直接使用,它会自动翻译成Assembly
int main(void)
{
unsigned char SerData = 0x44;
unsigned char TempSerData;
unsigned char x;
TempSerData = SerData;
DDRC |= (1<<SerPin); //configure PORT C pin3 as output
for (x=0;x<8;x++)
{
if (TempSerData & 0x01) // check least significant bit
PORTC |= (1<<serPin); // set PORT C pin 3 to 1
else
PORTC &= ~(1<<serPin); // set PORT C pin 3 to 0
TempSerData = TempSerData >> 1; // shift to check the next bit
}
return 0;
}
但是,如果你想翻译if
,你可以使用这样的东西,但正如我所说,你不需要转换它,或者你不需要C
这份工作。
int x = 0, y = 1;
(x >= y) ? goto A: goto B
A: // code goes here
goto end
B: // code goes here
goto end
end: return 0;
在组装中,你可以很容易地做到这一点。例如,在Àtmega128
:
ldi r16, 0x00 ; load register 16 with 0
ldi r17, 0x01 ; load register 17 with 1
sub r17, r16 ; take the difference
brcs if_label
else_label: ; do some operation on that line or on the other lines
rjmp end
if_label: ; do some operation on that line or on the other lines
end: rjmp end ; program finishes here
推荐阅读
- git - .gitignore,排除文件夹中的所有文件......但保留那些带有.gitkeep的子文件夹?
- c++ - std::mutex 阻止线程修改什么?
- reactjs - 即使我先检查类型,Flow 也会抱怨类型不兼容
- python - 气流:为每个文件运行 DAG 的正确方法
- python - 一个接一个地发送异步HTTP请求
- c# - C#获取List中List的值匹配的List元素
- python - Tensorflow抛出distributed_function错误
- c++ - 使用 memcpy() 复制到 std::chrono::milliseconds 会产生错误 -Werror=class-memaccess
- amazon-web-services - AWS Sagemaker 在 AWS 上使用批量转换?
- python - 在 Python 命令行中以十六进制格式打印所有数字