C 如何避免在调用函数时重置全局变量
我是一个初学者,开始写一些简单的程序。 我想创建一个全局变量来维护我的记录编号,不幸的是,每次调用函数时,我的变量都重置为零。我查看了其他一些示例,比如人们使用static或volatile声明我的变量,我尝试了这两种方法,但仍然重置了我的值。请告知。谢谢 请看下面我的函数C 如何避免在调用函数时重置全局变量,c,variables,global,C,Variables,Global,我是一个初学者,开始写一些简单的程序。 我想创建一个全局变量来维护我的记录编号,不幸的是,每次调用函数时,我的变量都重置为零。我查看了其他一些示例,比如人们使用static或volatile声明我的变量,我尝试了这两种方法,但仍然重置了我的值。请告知。谢谢 请看下面我的函数 int record_number; int file_number; int Record_Count(int record_correct); { if (record_correct) record
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;
}
正如其他人所评论的,看起来您并不是直接从编辑器粘贴代码,而是从头开始输入代码 也就是说,我怀疑你已经陷入了C语言最臭名昭著的陷阱之一,这个陷阱仍然偶尔会吸引专业程序员(我从80年代初就开始使用这种语言,现在仍然这样做) 转到原始代码,仔细查看粘贴为的行
if (record_number == 100)
它真的这么说吗
if (record_number = 100)
如果是这样,则每次调用函数时都会执行If
语句,因为谓词(record\u number=100
)首先将100赋值给record\u number
,然后测试结果是否为非零(当然,100
是),并采用If
分支,将record\u number
设置为零(并同时递增file\u number
)
避免这种情况的方法是迅速养成编码习惯,然后坚持下去。始终以这种方式对常量的相等性比较进行编码:
if(100 == record_number)
然后,如果您将
==
错误键入为=
,编译器将为您抛出一个错误。我知道,不要使用全局变量。。。发布的代码不够。您必须在其他地方执行某些操作…可能需要展开代码段以显示这些“全局”变量的真实范围。声明它们时还应显式将它们初始化为零。@stevesliva,全局变量已初始化为0是的,您需要显示更多的代码,并且非常确定您在那里显示的内容将不起作用,因为您的函数声明中有分号。@AlterMann-我知道。不影响我的评论。第二个最受欢迎的陷阱是发布类似于故障代码的代码,而这应该是一个演示故障的示例。是的,但是如果OP对C来说确实是新手,那么这很可能是原因:)我们会看到的,建议对新手来说是好的。我同意,让我们看看。我对此投了赞成票,因为我想知道为什么这样做测试:constant==variable
。