在void函数中,声明全局变量不会使其成为全局变量[C]
我以为我知道关于全局变量的一切,但现在我无法解决这个问题。我删除了一些代码在void函数中,声明全局变量不会使其成为全局变量[C],c,global-variables,C,Global Variables,我以为我知道关于全局变量的一切,但现在我无法解决这个问题。我删除了一些代码 int counter;//global variable for increase or decrease int main(){ fun(); } void fun(){ counter=999; sad(); } void sad(){ printf("Counter is %d\n",counter); } 输出为0。为什么?它应该按照GCC 4.6、4.7和4.8中的预期工作 为了运行您的代码,我必须有一
int counter;//global variable for increase or decrease
int main(){
fun();
}
void fun(){
counter=999;
sad();
}
void sad(){
printf("Counter is %d\n",counter);
}
输出为0。为什么?它应该按照GCC 4.6、4.7和4.8中的预期工作 为了运行您的代码,我必须有一些额外的行(声明和include)。尝试编译并运行以下命令:
#include <stdio.h>
int counter;//global variable for increase or decrease
void fun();
void sad();
int main(){
fun();
}
void fun(){
counter=999;
sad();
}
void sad(){
printf("Counter is %d\n",counter);
}
#包括
整数计数器//用于增加或减少的全局变量
虚无乐趣();
虚无悲伤();
int main(){
乐趣();
}
虚无乐趣(){
计数器=999;
sad();
}
void sad(){
printf(“计数器是%d\n”,计数器);
}
如果这给了您相同的行为,那么它一定是一个编译器错误。您的代码有未定义的行为。
fun
和sad
都缺少原型,您的代码在声明它们之前调用它们。因此,编译器假定这两个函数都返回int
。由于函数实际上是void
,这会导致未定义的行为
一旦您添加了原型,您的代码就可以运行了
#包括
整数计数器//用于增加或减少的全局变量
void fun();//也许您应该说明您正在使用的编译器。
#include <stdio.h>
int counter;//global variable for increase or decrease
void fun(); // <<== First prototype
int main(){
fun();
}
void sad(); // <<== Second prototype
void fun(){
counter=999;
sad();
}
void sad(){
printf("Counter is %d\n",counter);
}