為什麼這篇#Include鄉民發文收入到精華區:因為在#Include這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者StubbornLin (Victor)看板C_and_CPP標題Re: [問題] #inclu...
#Include 在 A Y L N A N E O Instagram 的最佳解答
2021-10-03 11:47:52
I am so clumsy I really need help. Me and my butter fingers really need @roborock_sg 🥺 With Roborock H7 cordless handheld stick vacuum, I’m no longe...
要搞清楚會不會重覆定義 先要搞清楚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