Re: [問題] #include 重複定義
看板C_and_CPP (C/C++)作者StubbornLin (Victor)時間16年前 (2009/02/12 22:53)推噓1(1推 0噓 2→)留言3則, 2人參與討論串2/3 (看更多)
要搞清楚會不會重覆定義 先要搞清楚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
→
02/12 22:56, , 1F
02/12 22:56, 1F
→
02/12 22:58, , 2F
02/12 22:58, 2F
推
02/12 23:04, , 3F
02/12 23:04, 3F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 3 篇):
3
13
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章