extern与头文件(*.h)的区别和联系

来源:互联网 发布:matlab初始化数组 编辑:程序博客网 时间:2024/05/16 05:34

参考:http://blog.csdn.net/yuyantai1234/article/details/7245412

  • 在这方面extern和static是同级别的修饰符

  • 变量

    • extern int a;//声明一个全局变量
    • extern int a = 10;//定义一个全局变量
    • int a;//定义一个全局变量
    • int a = 10;//定义一个全局变量
  • ifndef
    • 作用:防止头文件重复定义
    • 其实,就是防止全局变量的重复定义。
    • 如果头文件里的所有全局变量都使用extern 声明,所有的函数都只给出函数原型不定义,那么就可以不用ifndef了
  • 函数
    • 定义的时候用extern,说明函数可以被外部引用。
    • 声明的时候用extern,说明这是一个声明。
    • 定义函数要有函数体,声明函数没有函数体,函数定义和声明都可以将extern省略。
    • 其他文件也知道这个函数是在其他地方定义的,所以不加extern也行

  • 函数
    • 方法一:包含头文件
//a.h#ifndef _A_H_#define _A_H_[extern] void fun(void);#endif
//a.c#include "a.h"#include <stdio.h>//不需要声明void fun(void){    printf("fun:shuncom\n");}
#include "a.h"int main(void){    fun();    return 0;}
  • 方法二:extern
//a.c#include <stdio.h>void fun(void){    printf("fun:shuncom\n");}
//b.c#include <stdio.h>//需要声明[extern] void fun(void);int main(void){    fun();    return 0;}
  • 变量
  • 方法一:包含头文件
//a.h#ifndef _xx_h_#define _xx_h_extern int num;//必须的#endif
//a.c#include "xx.h"#include <stdio.h>int num = 10;//不用加extern,加了报warning//但是可以解决//extern "C"//{//    extern int num = 10;//}
//b.c#include "xx.h"#include <stdio.h>int main(void){    printf("%d\n",num);}
  • 方法二:extern
//a.cint num = 10;
//b.c#include <stdio.h>extern int num;//必须的int main(void){    printf("%d\n",num);}
原创粉丝点击