作者StubbornLin (Victor)
看板C_and_CPP
标题Re: [问题] #include 重复定义
时间Thu Feb 12 22:53:01 2009
要搞清楚会不会重覆定义 先要搞清楚preprocessor是怎样运作的
其实include你可以把它想成把整个档案抓来摆在include的位置
举个例子
--- foo.h ---
void foo();
--- bar.h ---
void bar();
--- util.h ---
#include "foo.h"
void doSomething();
--- main.cpp ---
#include "foo.h"
#include "bar.h"
#include "util.h"
....
首先先看util会被怎样展,它会变成这样
void foo();
void doSomething();
这个main.cpp会被展开成什麽样子呢? 应该会像这样
void foo();
void bar();
void foo();
void doSomething();
foo因为重覆出现 所以会有重覆定义的问题
其实原则很简单,你只要想像#include那行会被整个档案的内容取代就是了
preprocessor应该也是这样做 有没有什麽其它细节我就不太清楚
#ifndef和#define的目的就是在避免重覆定义
我们要解决重覆定义的问题 只要把上面的foo.util改成
#ifndef FOO_H
#define FOO_H
void foo();
#endif
如此一来main.cpp会被展开成
#ifndef FOO_H
#define FOO_H
void foo();
#endif
void bar();
#ifndef FOO_H
#define FOO_H
void foo();
#endif
void doSomething();
因为FOO_H在前面被define了,所以preprocessor在後面的foo就会把它忽略掉
这样就不怕直接或间接的include到同一个header了
--
哇咧咧 创意投票系统
http://walele.com
易记学 程式设计教学
http://ez2learn.com/
易记学 程式设计讨论区
http://forum.ez2learn.com
VICTOR's 个人Blog
http://blog.ez2learn.com/
财报分析王
http://victorlin.serveftp.org/stock/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.113.155.49
1F:→ tsaiminghan:谢谢, 请教一下通常会把什麽东西放到.H档内? 02/12 22:56
2F:→ tsaiminghan:除了原型宣告&共用的定义之外 02/12 22:58
3F:推 plover:WTL全部写在header files (  ̄ c ̄)y▂ξ 02/12 23:04