您的位置:首页 > 编程语言 > C语言/C++

黑马程序员----C语言内部函数,外部函数,内部变量,外部变量篇

2015-04-19 13:49 246 查看
-------android培训java培训IOS培训、期待与您交流!-------

一、static和extern与函数

外部函数:定义的函数能被本文件和其他文件访问

 1> 默认情况下所有函数都是外部函数

 2> 不允许有同名的外部函数

 

 内部函数:定义的函数只能被本文件访问,其他文件不能访问

 1> 允许不同文件中有同名的内部函数

 

 static对函数的作用:

 1> 定义一个内部函数

 2> 声明一个内部函数

 

 extern对函数的作用:

 1> 完整地定义一个外部函数

 2> 完整地声明一个外部函数

 (extern可以省略,默认情况下声明和定义的函数都是外部函数)

 

Main.c文件

// 声明一个test函数

// 完整地声明一个外部函数

// extern可以省略

//extern void test();

void test();

 

//void test2();

 

int main()

{

    test();

   

    //test2();

    return 0;

}

 

//void test()

//{

//   

//}

static void test2()

{

   

}

 

One.c文件

#include <stdio.h>

// 声明一个内部函数

static void test2();

 

// 完整地定义一个外部函数

/*

extern void test()

{

    printf("调用了test函数\n");

}*/

// 默认情况下,所有的函数都是外部函数,所以可以省略extern

void test()

{

    printf("调用了test函数\n");

   

    test2();

}

// 定义一个内部函数

static void test2()

{

    printf("调用了test2函数\n");

}

二,static和extern与变量

static用来定义一个内部函数,不允许其他文件访问;extern用来定义和声明一个外部函数,允许其他文件访问。static和extern对变量也有作用,不过跟函数有点差别。

 

在C语言中,全局变量定义的位置是有限制的,默认情况下,一个函数不可以访问在它后面定义的全局变量

如果前面定义的main函数中尝试访问后面定义的变量a,编译器直接报错了。

解决这个错误的话,有2种办法:

第1种办法:将变量a定义在main函数的前面 

第2种办法:在main函数前面对变量a进行提前声明

也就是让main函数知道变量a的存在就行了,至于变量a定义在哪个位置,main函数不用管。

完整的变量声明需要用extern关键因为extern是用来声明一个已经定义过的变量。 

/*

 全局变量分2种:

 外部变量:定义的变量能被本文件和其他文件访问

 1> 默认情况下,所有的全局变量都是外部变量

 2> 不同文件中的同名外部变量,都代表着同一个变量

 

 内部变量:定义的变量只能被本文件访问,不能被其他文件访问

 1> 不同文件中的同名内部变量,互不影响

 static对变量的作用:

 定义一个内部变量

 

 extern对变量的作用:

 声明一个外部变量

 

static对函数的作用:

 定义和声明一个内部函数

 

 extern对函数的作用:

定义和声明一个外部函数(可以省略)

main.c文件

 */

#include <stdio.h>

void test();

// 定义一个外部变量

//int a; 这么多个a都是代表同一个a

//int a;

//int a;

//int a;

//int a;

// 定义一个内部变量

static int b;

// 声明一个外部变量

//extern int a;

 

int main()

{

    //b = 10;

    //test();

    extern int a;

    a = 10;

    /*

    a = 10;

test(); 

  printf("a的值是%d\n", a);*/

    return 0;

}

int a;

one.c 文件

#include <stdio.h>

int a;

static int b;

void test()

{

    printf("b的值是%d\n", b);

   

    /*

    printf("a的值是%d\n", a);

   

    a = 20;*/

}

Static对局部变量的作用

#include <stdio.h>

/*

 static修饰局部变量的使用场合:

 1.如果某个函数的调用频率特别高

 2.这个函数内部的某个变量值是固定不变的

 */

void test()

{

    static double pi = 3.14;

    double zc = 2 * pi * 10;

    int a = 0;

    a++;

    printf("a的值是%d\n", a); // 1

    /*

     static修饰局部变量:

     1> 延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁

     2> 并没有改变局部变量的作用域

     3> 所有的test函数都共享着一个变量b

     */

    static int b = 0;

    b++;

    printf("b的值是%d\n", b); // 3

}

int main()

{

    for (int i = 0; i<100; i++) {

        test();

    }

    test();

    test();

    test();

    return 0;

}

static和extern的总结

1.extern可以用来声明一个全局变量,但是不能用来定义变量

2.默认情况下,一个全局变量是可以供多个源文件共享的,也就说,多个源文件中同名的全局变量都代表着同一个变量

3.如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: