MFC头文件编译问题请教

老子不容易 2014-03-15 10:43:10

我在.h文件中定义了一个全局变量,然后再多个.cpp文件中include这个头文件,编译出现全局变量重复定义。.h文件中的内容为:
#pragma once
#ifndef H_TEST_H
#define H_TEST_H

//extern int inta;
int inta;
int wp_add(int );

#endif
然后再多个cpp文件中include这个头文件,编译错误提示是inta已经定义。我想知道为什么我已经有一个值编译一次的宏了,为什么还提示重复定义了呢?如果我将这个头文件在stdafx.h中include,在别的cpp文件中只include stdafx.h就不会出现重复定义的错误,并且如果在stdafx.h中int inta,多个cpp中include stdafx.h,也不会提示inta重复定义,大神能不能给解释一下呢?
...全文
135 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
JiMoKuangXiangQu 2014-03-15
  • 打赏
  • 举报
回复
#pragma once只能避免一个头文件被重复包含。譬如: A.cpp: #include "HTest.h" #include "HTest.h" // 第二个包含会被忽略了 事实上LZ的头文件用了 #ifndef H_TEST_H #define H_TEST_H #endif 结构,已经起到了避免重复包含的作用。#pragma once在这里是多余的。 为什么在将上述头文件包含在不同.cpp文件中会出现重复包含呢?那是因为生成最终可执行程序的流程分为大概以下几步: 1. 预处理阶段:预处理器将所有以#开头的行处理掉,宏替换掉,等等; 2. 编译:编译器逐个编译代码单元,通常是.c,.cpp,...文件。这是对于LZ的情况,每个包含了HTest.h的文件都会产生一个inta符号。 3. 链接:到了链接阶段将所有.obj,.lib啊什么合成到一块,发现多个定义的inta符号,链接器报错。 LZ可以采用以下方法: 只在某个.cpp中定义inta,在头文件中extern int inta;然后再需要引用inta的文件中包含HTest.h即可。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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