c语言H头文件中定义变量 提示重复定义“multile definition of str1” 问题

func1.h

#ifndef _FUNC1_H_
#define _FUNC1_H_

#include

struct STRUCT_TRQST_BTH{
    char        businflag[3];
    sqlint32    date;
    sqlint32    serialno;
    char        custno[13];
    char        agencyno[4];
    char        netno[10];
}gstRequest, gstRequestIn, gstRequestOut, gstcdRequest, 
gstcrRequest; /*正确  多源文件包含该头文件时,如果任意一个源文件中定义该变量 头文件中的则为声明,
如果源文件都没定义该变量,头文件中的该变量 即为声明又为定义*/

int a1;    /*正确  多源文件包含该头文件时,如果任意一个源文件中定义该变量 头文件中的则为声明,
如果源文件都没定义该变量,头文件中的该变量 即为声明又为定义*/
//int a2=2; //多源文件包含时,报错:重复定义

static int b1;   //多源文件包含该头文件时,相当于在每个源文件中定义了一个独立静态变量b1 ,互相独立不相干
static int b2=22;   //多源文件包含该头文件时,相当于在每个源文件中定义了一个独立静态变量b2 ,互相独立不相干

const int c1; //正确
//const int c2=22; //多源文件包含该头文件时,报错:重复定义

char str1[10]; //正确
//char str2[10]="abc"; //多源文件包含该头文件时,报错:重复定义

#endif

头文件中在不使用 extern 关键字 声明变量时的情况。

a1:为全局变量,任何包含“func1.h”的源文件 都可访问,没有包含该头文件的源文件 可通过 声明

extern int a1; 来访问 a1变量

多源文件包含该头文件时,如果任意一个源文件中定义该变量 头文件中的则为声明,如果源文件都没定义该变量,头文件中的该变量 即可为声明又可为定义

a2:该变量有赋值 所以该处 为定义变量a2  一个源文件包含时 不会报错,多源文件包含时会报错,

b1,b2: 作用域为 包含该头文件的源文件,每个源文件 都有自己的独立的b1 b2 变量 只是名字相同而已,内存地址不相同。

c1:常量的声明,可以在任何包含“func1.h”的源文件 定义 const int c1= 222; 来定义常量。

注意:int a1; 在c++头文件中  必须 指定 extern int a1; 否则多源文件包含时会 提示 重复定义

你可能感兴趣的:(c语言,蓝桥杯,开发语言)