全局变量是否可以定义在可被多个.C文件包含的头文件中

yanjinbin0 2008-11-05 04:53:43
这是个面试题,哭死,我说不可以,网上答案说可以.
写个程序实验下,但老是提示全局变量重复定义的错误,实验代码如下:
//test.h
void test(void);
int gi;

//test.cpp
#include "test1.h"
void test()
{
gi++;
}

//main.cpp
#include "stdio.h"
#include "string.h"
#include "test1.h"
int main()
{
gi = 1;
test();
printf("%d \n",gi);
getchar();
return 0;
}

老是编译不过去,说要用到static,但我定义了N中组合还是出错,无办法,发到论坛大家帮忙解答下.谢谢.
...全文
160 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanjinbin0 2008-11-05
  • 打赏
  • 举报
回复
我是菜鸟别BS我啊,刚去查了下资料,
原来编译时会把.h文件和.c文件生成一个.obj文件,所以在通用文件的地方不能加防重复引用的代码,
因为每个.c文件都要跟.h编译生成一个.obj文件.
yanjinbin0 2008-11-05
  • 打赏
  • 举报
回复
靠把test.h改下:
#ifdef TEST_H
#define TEST_H
void test(void);
int gi;
#endif
就会出现gi为定义的错误.难道.c文件是通用头文件,会在每个都会关联的.c文件上编译一次????
yanjinbin0 2008-11-05
  • 打赏
  • 举报
回复
晕死,错了在.cpp文件中确实不可以这样,但是在.c文件中这种声明方式是可行的.
上面代码是可行的,不过注意文件后缀是.c而不是cpp,刚我的是cpp所以出错.
macfan 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 yanjinbin0 的帖子:]
全局变量是否可以定义在可被多个.C文件包含的头文件中
[/Quote]
不可以。
bluecll 2008-11-05
  • 打赏
  • 举报
回复
在头文件中除非加了extern,不过这是声明不是定义了。。。
xkyx_cn 2008-11-05
  • 打赏
  • 举报
回复
不可以

哪儿的答案说可以?

69,381

社区成员

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

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