我有一个程序需要破解。它是从另一种语言(这里不方便透露名称)翻译成C的。为了理解其工作原理,我正在慢慢重写和简化代码,以使用C提供的所有好的逻辑结构。
下面这段小代码在我的代码中不断出现,其中X和Y的值各不相同:
我想知道是否有人能提供更好的上述代码简化版本,我将非常感激。这种情况不止发生了五次,并且妨碍了我简化和理解流程控制的能力,因此,如果有人能提供更简洁/易读的版本,那将是太棒了。如果有人能为代码提供任何精彩的见解,那也很棒,尽管我基本上理解它的作用。
对于特定的X和/或Y代码的洞察,也可以有所帮助。就其价值而言,Y往往介于-2和2之间,而X通常为1。
下面这段小代码在我的代码中不断出现,其中X和Y的值各不相同:
ptr[X]--;
while(ptr[X])
{
ptr[X]--;
ptr += Y;
}
ptr
的类型是 char *
,由于它深嵌在循环中且依赖于输入和输出,我无法对数组的状态进行假设。我可以成功地“简化”为:
for(ptr[X]--; ptr[X]; ptr[X]--, ptr += Y);
但那太糟糕了。稍微好一点的说法是:
for(ptr[X]--; ptr[X]; ptr += Y) ptr[X]--;
我想知道是否有人能提供更好的上述代码简化版本,我将非常感激。这种情况不止发生了五次,并且妨碍了我简化和理解流程控制的能力,因此,如果有人能提供更简洁/易读的版本,那将是太棒了。如果有人能为代码提供任何精彩的见解,那也很棒,尽管我基本上理解它的作用。
对于特定的X和/或Y代码的洞察,也可以有所帮助。就其价值而言,Y往往介于-2和2之间,而X通常为1。
cat
实用程序就像",[.,]"这样简单。这个特定的程序实际上是一个bf解释器,用bf编写的,我想了解它的工作原理,因为这是我能想象到的唯一不使用递归编写的解释器(而且我已经知道如何使用递归编写一个)。 - Chris Lutz