声明和定义

Alf*_*red 2 c

仍然与C语句中的声明和定义混淆:如果头文件如下:

#ifndef _BASIC_H_
#define _BASIC_H_

void test();
extern int i; //define or declare
#endif
Run Code Online (Sandbox Code Playgroud)

两个源文件f1.c和f2.c包含这个头,然后一个源文件需要定义变量"i".

但如果头文件是这样的:

#ifndef _BASIC_H_
#define _BASIC_H_

void test();
int i; //define or declare
#endif
Run Code Online (Sandbox Code Playgroud)

和两个源文件f1.c和f2.c,包含这个头,没有在任何文件中定义变量"i",当我使用变量时它仍然会通过.
我的问题是定义变量的时候.

谢谢

Tho*_*ens 8

定义变量是指为存储分配内存并为其分配值.声明是指您存在具有特定名称和类型的变量,但已经为其分配了内存.

使用extern关键字意味着您要声明变量但不定义变量.

就您的具体问题而言,您的第一个例子是声明,第二个答案是定义.

  • 注意'int i;`'给出了变量的定义.严格阅读C标准说,如果多个文件包含该标题,那么您将获得"i"的多个定义,并且编译的链接阶段将失败.附录J(§J.5.11),给出了一个'公共扩展':**多个外部定义**对象的标识符可能有多个外部定义,有或没有明确使用关键字`extern `; 如果定义不一致,或者初始化了多个,则行为未定义(6.9.2). (2认同)