C:static int得到奇怪的值

use*_*487 0 c variables int static

(从原始问题改变变量名称以适应实际代码)我是C的新手,我正在实现一个队列.错误与static int head=0变量有关.每次调用dequeue()时它都会增加1.当队列出队并调用函数get_person()时,似乎发生错误.然后头变量似乎得到一个高随机数,如23423449.我不知道这是从哪里来的.但是,如果我摆脱"static"关键字,因此声明变量int head=0,它可以正常工作.怎么会?

dat*_*olf 5

包含文件的顶部使用"全局"变量:static int variable1=0

这清楚地表明,您不了解static关键字在全局范围内的含义.在全局范围内,在函数外部,静态意味着变量仅对编译单元中的代码可见,该变量已在其中定义.

现在,如果在标头中定义静态变量,则包含该标头的每个编译单元将具有该名称的自己的变量.所以你的程序中充斥着许多同名的变量,每个变量都特定于它所在的编译单元.

我认为你真正想要的是extern标题中的非静态声明,以及实际定义变量的一个编译单元.

  • @ user1121487:你写了把变量放在头文件中.那是什么?如何将源代码添加到答案中,以便我们可以看到您实际拥有的内容.无论如何,在头文件中使用全局范围`static`声明或定义是没有意义的. (2认同)