声明与定义的区别
声明时,并没有给它实际的物理内存空间,它有时候可以保证你的程序编译通过;
但是当函数或变量定义的时候,它就在内存中有了实际的物理空间
声明全局变量——用extern
//test1.h
extern char g_str[];
定义全局变量——在include test1.h(声明全局变量的文件)的文件中定义
//test1.c
#include "test1.h"
char g_str[] = "123456";
void fun1() { cout << g_str << endl; }
使用全局变量——如何在test1.c以外的文件中使用全局变量
//test2.c
法I;include全局变量的声明文件,
#include "test1.h"
void fun2() { cout << g_str << endl; }
法II:不include,但要重新声明一次
extern char g_str[];
void fun2() { cout << g_str << endl; }
总结:
由于全局变量只要被定义过一次,就可以直接使用。但要保证在该文件或者是在该文件include的文件中被定义
声明全局变量是extern的作用之一,另一个作用是:
当它与"C"一起连用时,如: extern "C" void fun(int a, int b); 则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的