Re: [問題] #include 重複定義

看板C_and_CPP (C/C++)作者 (Victor)時間16年前 (2009/02/12 22:53), 編輯推噓1(102)
留言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
謝謝, 請教一下通常會把什麼東西放到.H檔內?
02/12 22:56, 1F

02/12 22:58, , 2F
除了原型宣告&共用的定義之外
02/12 22:58, 2F

02/12 23:04, , 3F
WTL全部寫在header files (  ̄ c ̄)y▂ξ
02/12 23:04, 3F
文章代碼(AID): #19b3VFY1 (C_and_CPP)
文章代碼(AID): #19b3VFY1 (C_and_CPP)