1.可以定义的位置

  main函数所在文件的函数体外

  其它cpp文件的函数体外

不能放在h文件中,因为h文件可能会有多次引用,会爆重复定义

2.引用方式,c++里面

  通过extern 加变量的定义语句的方式 这样所有引用的这个变量只会是一个值

 

c中的全局变量

  1.可以定义的位置

  main函数所在文件的函数体外

  其它cpp文件的函数体外

  不能放在h文件中,因为h文件可能会有多次引用,会爆重复定义

---------------------------------------------------------

为什么可以这样使用?

  编译分为编译和链接过程。

  每个c,cpp对应一个文件,虽然在外面是不能看见,但是如果使用了extern的话,链接器会将同一名字的变量链接到一个地址,大约是在文件的某个段里面。

  因为c++的语法要求更严格,所以要求extern的变量和原变量必须有相同的声明,而c其实就是汇编语言没什么区别,更在乎的是变量的长度,对应类型没有做更多的检查。

---------------------------------------------------------

 

附录:

 

c++代码

--------------

main.h

 

#ifndef _MAIN_H_

#define _MAIN_H_

int g_value = 10;

class b

{

public:

    int _value;

    void good();

};

#endif

 

main.cpp

 

#include "main.h"

#include <iostream>

void b::good()

{

    //std::cout<<g_value<<std::endl;

}

 

good.cpp

 

#include <iostream>

#include "main.h"

using namespace std;

extern int g_value;

//int g_value;

int main()

     b obj_b;

    cout<<"old g_value:"<<g_value<<endl;

     obj_b.good();

    g_value = 0x10;

    cout<<"new g_value:"<<g_value<<endl;

       obj_b.good();

    system("pause");

 

}

-------------------------------------------------------------------

 

c代码

 

main.h

 

 

#ifndef _MAIN_H_

#define _MAIN_H_

void good();

#endif

 

 

main.c

 

 

#include "main.h"

#include <stdio.h>

int g_value = 10;

void good()

{

    printf("main.c print %d\n", g_value);

}

 

 

good.c

 

#include <stdio.h>

#include <stdlib.h>

#include "main.h"

extern char g_value;

//extern int g_value; 注意类型不一样在c里面是不会爆编译错误的

//int g_value;

int main()

    printf("old value:%d\n", g_value);

    g_value =0x10;

    printf("new value:%d\n", g_value);

    system("pause");

 

}