【问题标题】:How to avoid my global variable gets reset when i call my function当我调用我的函数时如何避免我的全局变量被重置
【发布时间】:2015-03-04 18:15:09
【问题描述】:

我是一个初学者,开始写一些简单的程序。 我想创建一个全局变量来维护我的记录号,不幸的是,每次我调用我的函数时,我的变量都会重置为零。我查看了其他一些示例,例如使用 static 或 volatile 声明我的变量的人,我尝试了它们,但仍然重置了我的值。请多多指教。谢谢。 请在下面查看我的功能。

int record_number;
int file_number;

int Record_Count(int record_correct);
{
   if (record_correct)
      record_number++;
   if (record_number == 100)
   {
      file_number++;
      record_number = 0;
   }

   return record_number;
}

【问题讨论】:

  • 我知道,不要使用全局变量...贴出的代码是不够的。你一定在某处做别的事......
  • 可能需要扩展代码 sn-p 以显示这些“全局”变量的真实范围。您还应该在声明它们时将它们显式初始化为零。
  • @stevesliva,全局变量已经初始化为0
  • 是的,您需要显示更多代码,而且很确定您在那里显示的内容不会起作用,因为您的函数声明中存在杂散分号。
  • @AlterMann - 我知道。不影响我的评论。

标签: c variables global


【解决方案1】:

正如其他人评论的那样,您似乎没有直接从编辑器中粘贴代码 - 而是从头开始输入。

也就是说,我怀疑您已经触犯了 C 中最臭名昭著的陷阱之一,该陷阱仍然偶尔会吸引专业程序员(我从 80 年代初就一直在使用该语言,现在仍然这样做)。

转到您的原始代码并仔细查看您粘贴为的行

if (record_number == 100)

真的是这么说的吗?

if (record_number = 100)

如果是这样,则每次调用函数时都会执行 if 语句,因为谓词 (record_number = 100) 首先将 100 分配给 record_number,然后测试结果是否为非零(@987654326 @ 是,当然)并采用if 分支,将record_number 设置为零(同时增加file_number)。

避免这种情况的方法是快速养成编码习惯,然后坚持下去。始终以这种方式对常量进行相等比较:

if(100 == record_number)

然后,如果您将== 错误输入为=,编译器将为您抛出错误。

【讨论】:

  • 第二个最喜欢的陷阱是发布代码,它类似于出现故障的代码,而它应该是一个演示错误的示例。
  • 是的,但是如果 OP 确实是 C 的新手,那么这很可能是原因 :) 我们会看到的,无论如何这个建议对新手都有好处。
  • 我同意,让我们看看。我对此表示赞同,因为我想知道为什么要这样进行测试:constant == variable.
猜你喜欢
  • 2020-10-02
  • 2019-12-27
  • 2013-04-18
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2012-12-19
  • 2016-01-06
  • 2014-10-23
相关资源
最近更新 更多