看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 如題 node.h node.c -- -- #include "node.h" #define DATATYPE char DATATYPE data; node* getnode() { struct nodetype { ... DATATYPE info; ... struct nodetype *next; } } void freenode(node* pn) { ... node* getnode(); ... void freenode(node*); } ... ... //EOF //EOF ============================================================================ queue.h queue.c -- -- #include "node.h" #include "queue.h" ... DATATYPE remove() { ... DATATYPE remove(); ... } ... //EOF //EOF -- 我想用linklist實現queue 因為我這次使用想放的資料是char 但是之後可能會希望他是int 這時我只要把DATATYPE char改成int 即可 所以我才會想這樣寫 之後要呼叫的時候在有main() 只#include "queue.h" 就能只用queue了 但是問題來了 就我這樣include下來 在"queue.c"裡無法知道DATATYPE到底是何方神聖 所以 DATATYPE remove() 會有 error 我想到的 法一 : 在queue.c 多一行#define DATATYPE char 但是我之後要改就要多改一個地方 法二 : 在queue.c 再#include "node.h" 一次 但是queue.h include一次 再include一次好像哪裡怪怪的 還有其他比較好的方法嗎? 小弟不才 希望大大能幫我解惑 <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.230.84.78 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1406136877.A.36E.html
soheadsome:#ifndef #define 07/24 01:57
Killercat:keyword : Include Guard <==查一下這個關鍵字 07/24 01:59
Killercat:另外別學壞用#pragma once, 這個M$ only 別用這個 07/24 01:59
Killercat:....剛查了一下 GCC跟clang居然支援了 真詭異 07/24 02:00
scwg:queue.c includes queue.h, which includes node.h 怎麼會 07/24 02:20
scwg:看不到 DATATYPE 呢? 除非有奇怪的 preprocessor directives 07/24 02:21
scwg:不然 #include 只是單純的內文展開, 多重 include 會統統拉到 07/24 02:23
scwg:最上層 07/24 02:23
Killercat:誒,我發現我誤解元po的問題了,請跳過我 XD 07/24 02:38
legendmtg:#pragma once應該是各大編譯器都有支援了 07/24 09:53
legendmtg:而且效率似乎比較好 所以也有人是建議使用 07/24 09:54
azureblaze:once沒進標準是因為"同個檔案"在某些平台難以定義 07/24 10:10
azureblaze:inclusion guard若編譯器有作特別處理效率其實差不多 07/24 10:12
Killercat:其實gcc -E出來應該結果都一樣...會有效能差嘛 07/24 11:23
Killercat:別告訴我gcc expand macros會多花幾個毫秒... XD 07/24 11:23
azureblaze:once可以連開檔都省略掉 檔案夠多會差一點點XD 07/24 11:27
其實我是gcc+emacs Elipse-cdt 都有用 ((但是Eclpise 是用gcc吧? 我寫這個是在Eclipse-cdt下 然後在queue.c會有Syntax error. 不給Complier 所以如果我不用Eclipse 直接gcc那些檔案會過嗎? 現在電腦不在身邊沒法測試 ※ 編輯: qas612820704 (125.230.84.78), 07/25/2014 00:45:30
scwg:不管是 Eclipse 還是去 command line 用 gcc, 出錯想找問題 07/25 03:59
scwg:一定得看錯誤訊息. 真的是DATATYPE的問題嗎? 還是哪裡少分號? 07/25 04:00
= =!!問題還真的不是出在DATATYPEGP身上 對不起我犯傻了 結果還真的是有地方少分號... 不過但是套出些關鍵字學到些東西 謝謝! ※ 編輯: qas612820704 (140.120.19.2), 07/25/2014 12:43:35