一个C语言变量的作用域可以是代码块 作用域,函数作用域或者文件作用域。
代码块是{}之间的一段代码。
#include <stdio.h>
int a = 0; // 文件作用域
int a; //这里是定义还是声明?这里是声明
int b;//是定义还是声明?如果已经定义过b,那么这里是声明,如果没有定义过b,那么这里是定义
/*
*这是C语言里面比较诡异的写法
*诡异的写法还有下面一类
*/
void func1();
void func2(void);
/*
空括号对于C语言意思是函数可以有参数,也可以没有参数!
所以加上void标明我这里不需要参数!
*/
void func3(int n);//明确要求参数,调用必须要有参数
int main(){
int a = 1;//a的作用域是所属的这个{}
{
int a = 2;//这个a的作用域是这个{}
//这里不会报错,这个a会把上面的a覆盖
printf("a = %d\n",a);//输出a =2
}
printf("a = %d\n",a);//输出a = 1
func2();
func3(100);
}
void func2(void)
{
printf("a = %d\n",a);//输出a = 0
}
void func3(int n)
{
printf("n = %d\n",n);
}
总结
int a; // 出现了语法的二义性,可以是声明也可以是定义
void func();//出现了二义性,可能有参数,也可能没有参数
int a = 0;//明确的定义一个变量
extern int a;//明确的声明了一个变量
//extern的意思是这个变量是全局的,已经在其他文件中定义了,这里只是声明后使用而已!
void func(void);//明确的声明一个函数没有任何参数