作用域、二义性和extern

一个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);//明确的声明一个函数没有任何参数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,221评论 0 13
  • 记得一个重要的节点,约了心仪的男生!从邀约的那一刻开始,整个人都是兴奋的!又想时间快点到、到怕时间过得太快自己还没...
    淘_子阅读 681评论 2 1
  • 爱情 可悲在 你在向前走 他却不愿意转身
    姜fjcyhv阅读 186评论 0 0
  • 一 南方的初冬,似乎并不那么寒冷,满山的树木仍旧绿意盎然。 “你们这里的树叶冬天不落吗?”作为一个北方人,我是很好...
    非此阅读 607评论 13 9
  • 我们与任何人的相处归根结底都是与自己的相处,当我们能对自己全然的欣赏,全然的疼惜,全然的理解,全然的接纳的时候,一...
    赵妍华太阳花阅读 160评论 0 4