将 C for 循环翻译成 Pascal

translating a C for loop to Pascal

我正在将“旧”C 程序翻译成(对象)Pascal。 我正在重新考虑我对以下内容的翻译:

for (objlist = list->unbounded; objlist; objlist = objlist->next) {
  /* do stuff */
}

起初我将循环翻译如下:

objlist := list.unbounded;
repeat
  // do stuff
  objlist := objlist.next;
until objlist = nil;

但后来我想知道,如果“objList”为零会怎样? 循环是否应该翻译成while循环(这样objList在进入循环前可以测试)?

objlist := list.unbounded;
while (objlist <> nil) do
  begin
    // do stuff
    objlist := objlist.next;
  end;

提前致谢。

这肯定是一个 while 循环。 C for循环实际上是一个while循环

您应该始终努力编写健壮的代码,即使在前提发生变化并且指针突然变为空时也能正常工作的代码。在使用前检查指针是否为 null 是一种很好的做法。

即使你看起来像 c 代码是 repeat... until c for 循环实际上在第一次迭代时检查 null。

你可以用一个简单的例子来试试这个

#include <stdio.h>
  
int main(){
  for(int i=20 ;i < 10;i++){
      printf("%d\n",i);
   }
   return 0;

}

看这个流程图 from https://beginnersbook.com/2014/01/c-for-loop/

即使原始代码没有检查初始空指针,我也会推荐第二种 while 循环样式。