将C程序翻译成其他编程语言
我正在尝试翻译一个C程序。 目标语言并不重要,我只是想了解程序的每个部分都在做什么。
我找不到任何细节:
variable=1;
while(variable);
我知道这是一个循环,这是真的(我已经读过堆栈溢出的代码实际执行的类似问题),但在这种情况下,没有代码与此相关。 所以我想知道,这个程序是否在“睡眠” - 而这个正在执行?
那么,我不明白的另一部分是:
variable=0;
variable=variable^0x800000;
我相信价值应该是24位,但是在任何其他C程度不低的编程语言中真的需要它吗?
非常感谢
while(variable);
实现自旋锁定; 即这个线程将保留在这个语句中,直到variable
为0为止。我已经介绍了这个术语来帮助你用你的新语言搜索一个好技术。
它显然会烧毁CPU,但如果仅用于几个时钟周期,则可能是一种非常有效的方法。 为了使其运行良好, variable
需要通过volatile
。
variable = variable ^ 0x800000;
是XOR操作,在这种情况下实际上是单个位切换。 (我宁愿在多线程代码中看到variable ^= 0x800000
。)它的确切用法可能是从上下文中解释的。 请注意,如果XOR的参数小于这个值,它们的参数将被提升为int
。 variable^0x800000
是一个24位类型是值得怀疑的,除非int
在你的平台上的大小(不太可能,但可能)。
我正在尝试翻译一个C程序。
除非你正在编写一个编译器(有时称为译码器 - 或源代码编译器 - 如果翻译成某种不同于汇编器的编程语言),否则不要编译C程序 。 你需要做很多工作(至少几个月才能完成一个天真的编译器--TinyCC,更可能需要几十年)
在C中思考并尝试理解它的语义(比语法更重要)。
while(variable);
该循环有一个空的身体。 让空的主体变得更明显(语义保持不变)更具可读性:
while(variable) {};
由于循环体(和测试)不改变variable
(它没有可观察的副作用),只要variable
的初始值非零,循环就会无限期地运行。 这会加热你的处理器。
但是你可能已经把这个variable
声明为volatile,然后让外部的东西改变它。
variable=variable^0x800000;
^
是一个按位XOR。 你正在切换(用1替换0和用0替换1)一个位(第23位,IIRC)
要回答你的第二个问题:variable = 0; 变量=可变的0x800000 ^;
这个操作是一个称为XOR的按位操作。 XOR操作通常用于切换位,而不管其状态如何: 0 ^ 1 = 1 1 ^ 1 = 0
上一篇: Translate C program to other programming languages
下一篇: Confusion about translation phases before preprocessing in C