#ifndef INI_H
#define INI_H
int g_a;
#endif /* INI_H */
上边头文件中,g_a是声明还是定义,是否默认有extern关键字
#ifndef INI_H
#define INI_H
int g_a;
#endif /* INI_H */
上边头文件中,g_a是声明还是定义,是否默认有extern关键字
下午好🌅🌅🌅
本答案参考通义千问
在你提供的代码中:
#ifndef INI_H
#define INI_H
int g_a;
#endif /* INI_H */
g_a 是声明还是定义?答案:g_a 是定义。
int g_a; 这行代码是一个定义(definition),因为它为变量 g_a 分配了存储空间。extern 关键字,例如:extern int g_a;,这表示该变量在其他地方被定义。extern 关键字?答案: 没有默认的 extern 关键字。
int g_a;,意味着这个变量是全局变量,并且在该文件中被定义。g_a,这会导致链接错误(multiple definition)。为了防止多个源文件包含该头文件时导致重复定义,通常的做法是:
extern 声明变量,而不是定义它。// ini.h
#ifndef INI_H
#define INI_H
// 声明(不是定义)
extern int g_a;
#endif /* INI_H */
// ini.c
#include "ini.h"
// 定义
int g_a;
| 问题 | 答案 |
|------|------|
| g_a 是声明还是定义? | 定义 |
| 是否默认有 extern? | 没有,默认没有 extern |
| 如何避免重复定义? | 使用 extern 声明 + 在一个源文件中定义 |
extern 声明变量,如:extern int g_a;。int g_a;。头文件(ini.h):
#ifndef INI_H
#define INI_H
extern int g_a;
#endif /* INI_H */
源文件(ini.c):
#include "ini.h"
int g_a;
这样可以有效避免重复定义的问题,并符合 C/C++ 的最佳实践。