Pascal fpc:如何在初始化全局变量之前对其进行初始化

Pascal fpc:如何在初始化全局变量之前对其进行初始化,pascal,freepascal,2d-games,text-based,Pascal,Freepascal,2d Games,Text Based,我正在用pascal做一个简单的文字游戏(一个真正的初学者)。有一个常规例程,重复几次(循环变量,表示级别)。在例行程序的开头,有一部分会询问角色的名字。如果一般重复循环在某个级别(1-4)完成或中止,游戏将返回到第一类菜单。我希望只在第一次询问名称,但是,当然,我得到了“变量”循环“似乎没有初始化”警告。有没有办法重构代码以避免它? 谢谢 代码摘录(留下不必要的细节): 那么,如何初始化/更改cycles变量(甚至任何其他变量)以避免该消息,并且不通过关闭编译器提示选项进行欺骗?如果cycle

我正在用pascal做一个简单的文字游戏(一个真正的初学者)。有一个常规例程,重复几次(循环变量,表示级别)。在例行程序的开头,有一部分会询问角色的名字。如果一般重复循环在某个级别(1-4)完成或中止,游戏将返回到第一类菜单。我希望只在第一次询问名称,但是,当然,我得到了“变量”循环“似乎没有初始化”警告。有没有办法重构代码以避免它? 谢谢

代码摘录(留下不必要的细节):


那么,如何初始化/更改cycles变量(甚至任何其他变量)以避免该消息,并且不通过关闭编译器提示选项进行欺骗?

如果cycles是一个全局变量,如示例代码中所示,则只需在启动任何操作之前,在程序的主块中执行以下操作:

begin
  cycles := 1;
  game_action := Chr(0);
  { etc... }
  ...
end.
这就是您通常初始化全局变量的方式:在主
开始
/
结束。
块中。某些版本的Pascal还允许(对于全局变量):

但其他人没有。我不知道你的帕斯卡是否允许。如果是这样,您就不必再在主块中初始化了。但请注意,这可能不适用于
函数
过程
的局部变量。在那里,您可能必须使用(外部)
开始
/
结束函数或过程的块


FWIW,程序的主块通常可以在程序的最末端找到,在所有
常量
类型
变量
过程
函数
声明之后,它以一个点(
)结束


还要注意,注释是正确的:将程序拆分为单独的函数和过程,每个函数和过程都有各自的单个任务,并向它们传递任何必要的信息。不要编写单片代码块。这很难阅读,也很难维护。例如,对于每个(或大多数)案例项,创建一个包含必要参数的单独过程,并从案例语句中调用这些参数。这也使您的代码更易于阅读。

如果cycles是一个全局变量,如示例代码中所示,则在启动任何操作之前,只需在程序的主块中执行以下操作:

begin
  cycles := 1;
  game_action := Chr(0);
  { etc... }
  ...
end.
这就是您通常初始化全局变量的方式:在主
开始
/
结束。
块中。某些版本的Pascal还允许(对于全局变量):

但其他人没有。我不知道你的帕斯卡是否允许。如果是这样,您就不必再在主块中初始化了。但请注意,这可能不适用于
函数
过程
的局部变量。在那里,您可能必须使用(外部)
开始
/
结束函数或过程的块


FWIW,程序的主块通常可以在程序的最末端找到,在所有
常量
类型
变量
过程
函数
声明之后,它以一个点(
)结束


还要注意,注释是正确的:将程序拆分为单独的函数和过程,每个函数和过程都有各自的单个任务,并向它们传递任何必要的信息。不要编写单片代码块。这很难阅读,也很难维护。例如,对于每个(或大多数)案例项,创建一个包含必要参数的单独过程,并从案例语句中调用这些参数。这使您的代码更易于阅读,对您来说也是如此。

在代码中循环的第一次迭代中,循环在初始化之前被读取(由IF NOT(cycles In[])。编译器正确地发出了警告


解决方案很简单,在第一次重复之前对其进行初始化,或者像Rudy所说的那样,使用更多的对象pascal样式

在代码中循环的第一次迭代中,循环在初始化之前被读取(由IF NOT(cycles In[])。编译器正确地发出了警告


解决方案很简单,在第一次重复之前对其进行初始化,或者像Rudy所说的那样,使用更多的对象pascal样式

像这样的问题出现在v。通常情况下,它们的共同点是存在一个巨大的单片代码块,这使得没有经验的程序员很难看到如何对执行流施加任何控制。首先要做的是通过将代码拆分为子例程(read,procedures)来正确构造代码,每个子例程执行一个函数。如果您在这里花30分钟来做这件事,我想您会发现执行所需的流控制是微不足道的。试试看。名称:string=''@塞尔塔卡尤兹:那应该没有必要。我认为FreePascal也会将字符串初始化为零(或
'
),而且大多数Pascal都会将全局变量“归零”。@Rudy-Ok,然后投票关闭,因为缺少。这有记录吗?fpc是否有文件?该文件是否涵盖全球申报?您是否值得阅读这些文档?这四个问题的答案都是一样的。通常情况下,它们的共同点是存在一个巨大的单片代码块,这使得没有经验的程序员很难看到如何对执行流施加任何控制。首先要做的是通过将代码拆分为子例程(read,procedures)来正确构造代码,每个子例程执行一个函数。如果您在这里花30分钟来做这件事,我想您会发现执行所需的流控制是微不足道的。试试看。名称:string=''@塞尔塔卡尤兹:那应该没有必要。我认为FreePascal还将字符串初始化为nil(或
'
),并且大多数pascal将全局变量“调零”
var
  cycles: 1..5 = 1;
  { etc... }