关于变量重复定义的问题

crackling 2009-11-18 09:21:06
第一种情况:
我在头文件random.h中定义全局并初始化变量数组a[100],但是在random.c和main.c中都#include了random.h;
然后报重复定义变量。
第二种情况:
我在头文件random.h中定义全局变量数组a[100],在random.c中初始化,但初始化没有在函数中,在calc()中使用数组
a[],但是在main中调用函数calc()估计就出现a[]没有初始化。解决办法,将初始化的代码放在initial()函数中,在main()中使用calc()时先调用initial()函数。
想问问这种情况有没有更好的解决办法?
...全文
285 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2009-11-20
  • 打赏
  • 举报
回复
ding
crackling 2009-11-19
  • 打赏
  • 举报
回复
原来不在函数中 当main.cpp调用calc()时也 已经赋值,是我想得太多了……
只需在头文件中定义如下:extern a[100];
在random.cpp中初始化a[100]={...},这样在main.cpp中直接调用calc()就已经初始化了,
并不需要将初始化代码包含进函数。

个人觉得这是最方便的了,只需要#include一下头文件即可。
lklwlklw 2009-11-19
  • 打赏
  • 举报
回复
用头文件卫士防止重复包含
#ifndef Filename_H_
#define Filename_H_
....
....
#endif
hilant 2009-11-19
  • 打赏
  • 举报
回复
呵呵,赞成在*.c文件里面定义和初始化变量,然后头文件中extern 这个变量,头文件 最好用宏定义控制,避免重复定义结构体等,然后其他×.c文件调用这个头文件,那就不会出问题了
ZXW0521 2009-11-19
  • 打赏
  • 举报
回复
头文件在编译的时候,
完全把里面的内容放在cpp里了
所以,
在头文件定义一个 变量a,
等于在 一个工程的不同的cpp中都定义了这个变量a,
如果你直接做这样一件事情,
编译器肯定是要报错的,

比如:
f1.cpp 中,
定义 int a = 0;(全局的)

f2.cpp 中,
定义 int a = 0;(全局的)

那编译这个工程会出错,


如果:
f1.cpp 中,
定义 int a = 0;(全局的)

f2.cpp 中,
定义 extern int a = 0;(全局的)//加extern 关键字,表示是外部的,

那编译这个工程不会出错,

同样,
也可以在头文件中用extern声明这个变量,
要使用的cpp中包含这个头文件,
而在一个cpp中,定义这个变量(一定不能用extern)
lovesi3344 2009-11-18
  • 打赏
  • 举报
回复
用头文件卫士防止重复包含
#ifndef Filename_H_
#define Filename_H_
....
....
#endif

第二。如果引用的是其他文件的全局变量的值,请在声明前加上extern,并且不能赋值
ashizl 2009-11-18
  • 打赏
  • 举报
回复
学习了!
arong1234 2009-11-18
  • 打赏
  • 举报
回复
变量不能定义在头文件,否则这个文件被包含一次,就有一个新的实体被创建,必然导致符号重定义错误

正确的做法是在.cpp定义这个变量,然后在头文件声明一下。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧