我以为我了解全局变量的一切,但现在我无法解决这个问题。我删除了一些代码。
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.为什么?
答案 0 :(得分:3)
您的代码有未定义的行为。 fun
和sad
都缺少原型,您的代码在声明之前会调用它们。因此,编译器假定这两个函数都返回int
。由于函数实际上是void
,因此会导致未定义的行为。
添加原型后,您的代码runs perfectly。
#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);
}
答案 1 :(得分:0)
它应该可以工作,并且实际上在GCC 4.6,4.7和4.8中按预期工作。
为了运行你的代码,我必须有一些额外的行(声明和包含)。尝试编译并运行它:
#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);
}
如果这会给你相同的行为,那么它必定是一个编译器错误。