因为很多.c文件都可以包含.h文件,也就是说这个变量会在很多.c文件中存在一个副本。假如这是一个多文件项目,在连接阶段,连接器就会抱怨存在多个相同变量名的全局变量,导致连接出错。
所以.h文件中一般只能包含全局变量的声明,函数声明,宏定义一类的,在.h文件中定义变量是不被推荐的。
写个头文件 c.h 声明 一个结构体类型struct STU
{
int x
int y
}
定义结构体变量s的文件b.c
#include "c.h"
struct STU s/* 不加extern ,默认认为extern */
a.c 调用b.c里定义的全局变量s
#include <stdio.h>
#include "c.h" /* struct STU这个类型的定义(或者说声明)在这个头文件里 */
extern struct STU s/* 声明它是外部的类型是struct STU */
int main()
{
printf("s.x+s.y = %d+%d = %d\n",s.x,s.y,s.x+s.y)/*调用了*/
}
可以。但是分两种,一种仅限头文件用,另一种是包含这个头文件的文件也可以用。第1种的定义方式:
例子1-1: int a=0
例子1-2: node n={0,100}// node 为用户自定义类型
总结:第一种仅限头文件的定义和普通的变量定义方式一模一样。
第2种的定义方式:
例子2-1: extern int a
例子2-2: extern node a// node 为用户自定义类型
总结:第二中定义的方式在普通定义方法前加上"extern"即可
望采纳!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)