将 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 循环样式。
我正在将“旧”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;
}
看这个流程图
即使原始代码没有检查初始空指针,我也会推荐第二种 while 循环样式。