将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的参数小于这个值,它们的参数将被提升为intvariable^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

链接地址: http://www.djcxy.com/p/73295.html

上一篇: Translate C program to other programming languages

下一篇: Confusion about translation phases before preprocessing in C