保护宏不可以解决变量重复定义的问题
2017-04-23 21:12
260 查看
今天继续写实验班的程序,出了问题,这就引出了一个很重要的问题。之前不是很懂的。今天终于碰到了。
情景:
你建了一个工程,包含两个 cpp 文件,一个头文件 。
一个错误的认识是保护宏可以防止变量被重复定义。。。。。。是这样吗?
a.cpp:
b.cpp:
然后 zmx.h:
这样,真的可以吗?一编译。。。
multiple definition ...........那么你的想法是什么呢?
问题出在 你把c 和c++编译的单元看成是整个工程了。。。这就是问题所在。。。你以为一个文件中定义了保护宏,另一个文件会看到?
看不到的,兄弟,另一个文件 include 的时候,在这个文件中是没有定义保护宏的,所以他还会执行变量定义。。。。
每个文件编译成.o 文件后,还要链接吧,是吧,然后 两个文件中定义了同名变量就出现了这个问题。
在同一个文件中include 这个头文件两次没有出问题,也从侧面验证了这个想法。
可以看本博客的另一篇文章
情景:
你建了一个工程,包含两个 cpp 文件,一个头文件 。
一个错误的认识是保护宏可以防止变量被重复定义。。。。。。是这样吗?
a.cpp:
#include <iostream> #include "zmx.h" using namespace std; int main(){ return 0; }
b.cpp:
#include <iostream> #include "zmx.h" using namespace std; int voi(){ return 0; }
然后 zmx.h:
#ifndef __ZMX_H #define __ZMX_H int a; #endif // __ZMX_H
这样,真的可以吗?一编译。。。
multiple definition ...........那么你的想法是什么呢?
问题出在 你把c 和c++编译的单元看成是整个工程了。。。这就是问题所在。。。你以为一个文件中定义了保护宏,另一个文件会看到?
看不到的,兄弟,另一个文件 include 的时候,在这个文件中是没有定义保护宏的,所以他还会执行变量定义。。。。
每个文件编译成.o 文件后,还要链接吧,是吧,然后 两个文件中定义了同名变量就出现了这个问题。
在同一个文件中include 这个头文件两次没有出问题,也从侧面验证了这个想法。
可以看本博客的另一篇文章
相关文章推荐
- 解决C/C++语言中全局变量重复定义的问题
- C/C++语言中全局变量重复定义问题的解决方法
- 解决C/C++语言中全局变量重复定义的问题
- 解决重复包含一个头文件时变量重复定义的问题
- 关于头文件变量重复定义问题怎么解决(thinkvd开发日志)
- 变量被重复定义的问题的讨论
- C++ 头文件中为何添加了#ifndef #define #endif还会出现变量重复定义的问题
- 变量被重复定义的问题
- crontab 里面这么写可以解决环境变量问题
- requirejs定义的模块返回的永远是单例对象,可以借助javascript中的类解决模块间的相互干扰问题
- 关于多文件引用头文件变量重复定义的解决办法【BCB2010环境】
- asp.net中eval不能定义变量的问题的解决方法
- keil中建立多个c文件时,出现*** ERROR LXX: MULTIPLE PUBLIC DEFINITIONS问题(变量重复定义)。
- 解决PHP中函数重复定义的问题
- c++ 变量的重复定义问题 [multiple definition of] 与模板类
- 解决多重定义问题/如何声明全局变量让多个cpp文件使用
- 利用匿名namespace解决C++中重复定义的问题
- hpp文件解决类成员函数重复定义的问题
- winsock2.h头文件重复定义链接错误问题解决
- Vs2005下重复定义的问题解决 ... already defined in ...