procedure questiontype;
begin
writeln ('Enter the type of question you would like...');
writeln ('1. Add');
writeln ('2. Multiply');
writeln ('3. Subtraction');
writeln ('4. Division');
readln (typeofquestion);
case typeofquestion of
1: add;
2: multiply;
3: subraction;
4: division
else writeln ('Choose again');
end;
end;
加、乘、减、除都是过程。如果我将其放入主程序中,它将正常工作,但是当我将其作为过程本身时,我收到错误未声明的标识符。我在很多网站上查看过类似的示例,但我找不到任何示例。
如何让加、乘、减、除从这个程序内部转到它们的程序?
最佳答案
您必须在调用它们的例程之前声明它们。尽管您没有显示其他例程是如何定义的,但我推断它们是在您显示的例程之后声明的。
因此,您可以简单地重新排序代码,以便在调用它们的过程之前定义加法、乘法、减法和除法。
所以这会起作用:
procedure add;
begin
//do something;
end;
procedure questiontype;
begin
add;
end;
但这不会编译:
procedure questiontype;
begin
add;
end;
procedure add;
begin
//do something;
end;
Pascal 及其变体是一次性编译的,如果编译器在提到例程时不知道例程,则无法继续。
Pascal 通过使用“前向声明”确实支持 A 调用 B 和 B 调用 A 的协同例程。例如:
procedure B; forward;
procedure A;
begin
B;
end;
procedure B;
begin
A;
end;
自然地,这是一个无限循环,如所写,它将因堆栈溢出而终止(多么合适!),但当然有真实的例子,这是必要的。
但是,很少需要前向声明,并且应尽可能避免,因为它们会增加复杂性。只需重新排序声明即可找到解决方案。
最后,Brian Kernighan 著名文章 Why Pascal is Not My Favorite Programming Language 中明确提到了声明在使用之前发生的排序约束。 .
关于delphi - 如何在 Pascal 中的另一个过程中调用一个过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5363287/