美文网首页C/C++知识点
作用域、二义性和extern

作用域、二义性和extern

作者: 木鱼_cc | 来源:发表于2018-05-22 12:07 被阅读1次

一个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);//明确的声明一个函数没有任何参数

相关文章

  • 作用域、二义性和extern

    一个C语言变量的作用域可以是代码块 作用域,函数作用域或者文件作用域。代码块是{}之间的一段代码。 总结

  • static 和extern的区别

    extern extern置于变量或者函数前,作用域是整个工程,表示变量或者函数的定义在别的文件中,通过在变量前添...

  • Chapter 3 Data

    extern 和 auto 首先我们先要区分 声明, 定义和赋值的区别 声明, 仅仅代表这个变量在本作用域内可用,...

  • c++ day05

    全局变量 定义在所有函数外的变量, 均为静态存储, 作用域是定义处到源文件结束处, 可以使用 extern 和 s...

  • 面试题之关键字

    C语言中extern 的作用,extern “c”的作用? ①extern 可以置于变量或者函数前,以标示变量或函...

  • 一网打尽 JavaScript 的作用域

    JavaScript 的作用域包括:模块作用域,函数作用域,块作用域,词法作用域和全局作用域。 全局作用域 在任何...

  • 彻底搞懂JS作用域和作用域链

    作用域和作用域链 作用域:决定了代码区块中变量和其他资源的可见性; ·全局作用域和函数作用域 作用域是分层的内部可...

  • 作用域

    词法作用域,动态作用域,全局作用域,局部作用域,函数作用域,块级作用域,有些地方还能看到隐式作用域和显示作用域。 ...

  • C和C++混合编程

    extern "C"的作用 extern "C"的真实目的是实现类C和C++的混合编程。extern “C”是由C...

  • node.js小记 (0419) http源码解读

    什么是作用域? 作用域分局部作用域和全局作用域,同时作用域和变量有关,在局部作用域内可以访问到全局变量,在局部作用...

网友评论

    本文标题:作用域、二义性和extern

    本文链接:https://www.haomeiwen.com/subject/shshjftx.html