将C程序翻译成其他编程语言

时间:2016-11-10 12:51:56

标签: c

我正在尝试翻译C程序。目标语言并不重要,我只是想了解程序的每个部分正在做什么。

我找不到任何关于的细节:

variable=1;
while(variable);

我知道这是一个循环,这是真的(我已经在堆栈溢出中读到类似的问题,其中代码实际执行)但在这种情况下,没有与此相关的代码。所以我想知道,节目是否正在睡觉#34; - 这时正在执行吗?

然后,另一部分我不明白的是:

variable=0;
variable=variable^0x800000;

我相信这个值应该是24位,但这是否真的需要在任何其他编程语言中不是低级别的C?

非常感谢

3 个答案:

答案 0 :(得分:2)

while(variable);实现自旋锁;即这个帖子将保留在此语句中,直到variable为0.我已经介绍了这个术语,以帮助您用新语言搜索一个好的技术。

它显然会烧毁CPU,但如果只使用几个时钟周期,这可能是一种非常有效的方法。要使其正常运行,variable需要使用volatile进行限定。

variable = variable ^ 0x800000;是一个XOR操作,在这种情况下实际上是一个单位切换。 (我希望在多线程代码中看到variable ^= 0x800000。)它的确切用法可以从它的上下文中解释。请注意,如果XOR的参数小于int,则它们的参数将被提升为variable^0x800000。值得怀疑的是int是24位类型的,除非 {{1}}是您平台上的那个大小(不太可能,但可能)。

答案 1 :(得分:2)

  

我正在尝试翻译C程序。

不要翻译 C 程序,除非您正在编写compiler(有时称为转换程序 - 或source to source compiler - ,如果转换为不同的汇编程序的其他编程语言,这将执行此类任务。而且你需要做很多工作(对于一个天真的编译器来说至少需要几个月的时间TinyCC,而且可能需要几十年的时间)

C 中思考并尝试理解其semantics(比语法更重要)。

  

while(variable);

该循环有一个空体。使空体明显(语义保持不变)更具可读性:

 while(variable) {};

由于循环的主体(和测试)不会更改variable(它没有 observable side-effect),循环将无限期地运行variable的初始值不为零。这会加热你的处理器。

但是您可能已将variable声明为volatile,然后在外部更改它。

  

variable=variable^0x800000;

^bitwise XOR。您正在切换(将0替换为1,将0替换为0)一位(23 rd 一,IIRC)

答案 2 :(得分:1)

回答你的第二个问题: 变量= 0; 变量=可变的0x800000 ^;

此操作是一个称为XOR的按位操作。 XOR操作通常用于切换位,而不管它以前的状态如何: 0 ^ 1 = 1 1 ^ 1 = 0