C语言的全局变量为什么不能在函数外声明

C语言的全局变量为什么不能在函数外声明

     要明白这个问题的原因,我们来看下面一段简单的代码:
#include<stdio.h>
#include<string.h>
int a;
a= 9; 
int main(){
 printf("%d",a);
 return 0;
}

从上面的代码我们看到我把a设置为了全局变量,并且在函数外声明了。结果就会出现这个警告(其实在别的编译器里这就是个错误提示):

在这里插入图片描述

其实之所以会出现这个错误,还是因为我们搞混了一个概念:虽然程序在函数内,比如说main函数内是顺序执行的,但在函数外的程序外的程序代码不是顺序执行的,而是根据main函数内代码的顺序,需要哪个函数就去调用哪个函数,需要哪个变量就去调用哪个变量,就比如在这段代码中:你以为你同时声明了int a;
并对其初始化:a = 9; 但是在main函数中用到 “a” 这个变量时( printf("%d", a) ) .编译器只看到了 int a ; 因为函数外的代码不是顺序执行的。
所以想要改这个错误,有两种方法:

  1. 第一种就是:在声明变量的同时对其进行初始化。即让两段代码合成一句
#include<stdio.h>
#include<string.h>

int a = 9;
 
int main(){
 printf("%d",a);
 return 0;
}
  1. 第二种是:将函数外的已经声明的变量在函数内赋值初始化:
#include<stdio.h>
#include<string.h>

int a;
 
int main(){
 a = 9;
 printf("%d",a);
 return 0;
}

而现在就不会出现错误或者是警告了。其实这不仅仅是整型变量是如此,比如指针变量,结构体指针变量都必须声明的同时就初始化,或者是在函数内初始化赋值,不然编译器会报错。

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值