推 EdisonX:這種設計模式.. 真妙. 07/12 15:25
→ diabloevagto:痾...請問應該怎樣會比較好? 07/12 15:25
→ diabloevagto:會想要包在一起主要是因為到處分散的話感覺改起來 07/12 15:26
→ diabloevagto:會很麻煩= =" 07/12 15:26
→ EdisonX:我猜,你的 int aaaa, 實際上可以當作其它函式之輸入參數, 07/12 15:27
→ diabloevagto:因為一個cpp可能只會用到兩三個參數,但有好幾個cpp 07/12 15:27
→ EdisonX:若是這樣的話我寧可多打些字,param 多幾個。 07/12 15:27
→ diabloevagto:那個參數是在一開始調整的時候會修改,調整好就固定 07/12 15:27
→ diabloevagto:調整好之後就不會在修改了,所以就用const把他固定 07/12 15:28
→ diabloevagto:話說,我對於include還是不甚了解,每次都缺什麼 07/12 15:29
→ diabloevagto:就include什麼,造成不同的cpp可能有重複include 07/12 15:29
→ diabloevagto:另外那些參數不是傳入參數,只是單純是function內 07/12 15:32
→ diabloevagto:所會用到的值 07/12 15:33
推 EdisonX:個人是認為 func 內會用到就可以拿來當param,但爭辯先到這 07/12 15:36
→ EdisonX:所以 const int aaa, 是一開始就確定的「常數」嗎 ? 07/12 15:36
→ diabloevagto:沒錯 07/12 15:37
→ diabloevagto:因為那個參數別的func也不會知道,是某個func獨有的 07/12 15:38
→ diabloevagto:可以想像程式定義好的常數,只是為了修改方便才用 07/12 15:38
→ diabloevagto:呈const參數 07/12 15:38
→ EdisonX:sorry,現在才看到你只是要改善..基本上還是要 include , 07/12 15:55
→ EdisonX:沒辦法在 main.cpp 引入 **.h 後,其他檔案都看得到. 07/12 15:56
→ diabloevagto:所以就只能每個都include一次嗎? 07/12 15:56
→ diabloevagto:話說include的意思不是就把整段貼進去程式內? 07/12 15:57
→ EdisonX:是的。即使你用 M_PI 這東西, 還是要到處 cmath 不是嗎 ? 07/12 15:57
→ diabloevagto:我這樣想說在cpp前先inlcude .h好像合理 07/12 15:58
→ diabloevagto:還是說include的觀念並不是這樣呢? 07/12 15:58
→ EdisonX:是這樣沒錯,但**.h 有 header gard. 要達到你的要求就把 07/12 16:01
→ EdisonX:gard. 拿掉, 但日後維護反而糟, 危險。 07/12 16:01
→ diabloevagto:看來我需要好好研究一下include到底是怎樣子 07/12 16:02
→ diabloevagto:所以目前比較好的方式就是每個用到的cpp就include? 07/12 16:03
→ EdisonX:是的。其實你可以不用太在意include貼上後重新compile會慢 07/12 16:04
→ EdisonX:即使對整份專案重編,IDE還是會去看每個.h/.cpp有沒有更動, 07/12 16:05
→ EdisonX:有更動的話才重新生成.o,沒更動的話它是不會再動之前生成 07/12 16:06
→ EdisonX:的目的檔,所以真正費時只有第一次編譯,和re-build. 07/12 16:06
→ diabloevagto:這個道理知道,只是原本想說如果能一個地方include就 07/12 16:10
→ diabloevagto:可以的話,這樣在之後修改應該會比較清楚 07/12 16:10
→ diabloevagto:照這樣的話,目前應該就是用到就include 07/12 16:11
→ diabloevagto:感謝你了~ 07/12 16:11
推 hakman:#include 簡單來說只是複製貼上而已 07/12 17:10
→ hakman:你這樣做的話,會變成在global 宣告多個aaaa的變數 會錯 07/12 17:11
→ diabloevagto:我改成在main跟aa.cpp都include abc.h能正常編譯 07/12 17:19
※ 編輯: diabloevagto 來自: 140.125.20.92 (07/12 17:22)
推 hakman:如果你每個要用的地方都宣告的話,就會了 Orz 07/12 17:24
→ diabloevagto:但我有用gard包起來@@這樣還會? 07/12 17:26
→ diabloevagto:抱歉...我對於分多個cpp/h檔案還需要多了解Orz 07/12 17:26
推 hakman:應該是不了解#include 他簡單來說,就真的是複製貼上 07/12 17:31
→ hakman:等於你在兩個檔案的global 的地方都有一個aaaa的變數 07/12 17:31
→ hakman:要解覺得這問題,其實用macro 會好很多 07/12 17:32
→ hakman:在abc.h 中的 const int aaaa = 10 改成#define AAAA 10 07/12 17:33
→ hakman:然後在所有要用到aaaa的地方直接改成AAAA 07/12 17:34
→ hakman:不過這個你想要的只include 一次就可以在所有檔案用的需求 07/12 17:34
→ EdisonX:@h大,即使用macro,還是要一直 include **.h 吧 ? 07/12 17:34
→ hakman:就不符合 07/12 17:35
→ diabloevagto:用這樣子的話,我一樣是要在每個地方都iclude abc.h 07/12 17:35
→ diabloevagto:吧 07/12 17:35
→ hakman:要 07/12 17:37
→ diabloevagto:嗯Orz 07/12 17:37
→ hakman:為什麼你想要只include 在main 其它地方就可以用? 07/12 17:39
→ james732:編譯的時候每一個 .c 檔都是獨立的,所以要各自加 07/12 17:40
→ hakman:照理來說,每個檔案都是獨立的程式 可以搭配不同的main 07/12 17:40
→ hakman:你這樣的感覺,好像那麼多檔案,都是需要一個特定的main 07/12 17:42
→ hakman:那...幹嘛分檔案? 07/12 17:42
→ hakman:所以可以麻煩你說明一下你的需求是? 07/12 17:43
→ EdisonX:他的需求只是貪懶,一份const能給所有檔案看到,又不想固定 07/12 17:44
→ EdisonX:include 某個 header,問有沒有方式可滿足貪懶的需求。 07/12 17:45
→ hakman:那,gcc compile 時 宣告特定macro 這樣可以嗎? 07/12 17:46
→ james732:我想到的也是從compiler的參數去著手 07/12 17:48
→ diabloevagto:對gcc參數沒研究...我都依賴IDE= = 07/12 17:48
推 EdisonX:對唷,可以執編譯,連結期時動手腳. d 大用的是哪款 IDE ? 07/12 17:49
→ james732:剛剛查了一下,gcc可以用-Dmacro[=defn]來設定 07/12 17:53
→ shadow0326:我覺得const比macro好 :~ 07/12 18:15
推 littleshan:你不做任何include 命名空間就多了一堆變數 07/12 18:44
→ littleshan:不覺得哪裡不太蘇湖嗎? 07/12 18:45
推 ianlini:我也試過這種include 編譯不會錯 (常數不就直接define? 07/12 20:18
推 ianlini:挖我漏看了一頁... 當我沒回吧XD 07/12 20:21
不好意思,我沒有講清楚需求。
我目前有一個project,用到滿多個class。
我將每一個class都分成.h跟.cpp。
因為是寫影像處理方面的程式所以有不少門檻值要做設定,
並且都是要隨著環境調整,但只有在環境改變得時候才要修改。
第一次修改好後,以後就都不用再修改。
每個class多少都有一兩個參數要做設定,假如我都寫在cpp內這樣要設定的時候
就要到好幾個檔案內修改,這樣很麻煩。
所以我就想說把那些參數拉出來另外一個.h檔內,但這有一個情況是在每個要用到的
.cpp內都要在include定義參數的.h檔一次,這樣挺麻煩的。
想說能不能做到懶人方法,就是在一開始的main檔內include一次就好,讓其他的
class都能夠看到那些參數。
不知道這樣解是有沒有比較清楚,麻煩大家了。
※ 編輯: diabloevagto 來自: 140.125.20.92 (07/12 20:52)
→ littleshan:每個.cpp多加一行include → 這件事很簡單 07/12 21:19
→ littleshan:正常的 programmer 都應該能在三分鐘內搞定這件事 07/12 21:19
→ littleshan:還有另一個方法是設定IDE強制每個檔案都額外include 07/12 21:21
→ littleshan:不建議這個方法就是了 07/12 21:21
→ diabloevagto:了解!看來目前應該就是每個cpp都include一次 07/12 21:27
推 syuasdio:數字不會變的話我覺得用巨集就好了 07/13 01:05
→ EdisonX:const, macro 的戰爭基本上沒太大意義。 07/13 01:07
→ syuasdio:樓上,我沒有要戰啦,只是看完本文後的直覺想法 07/13 01:10
→ syuasdio:我承認我沒看到推文已經講過了 囧 07/13 01:11
→ loveme00835:extern 07/13 01:37
→ loveme00835:原來是想不用 include 的方法... include 說明了相依 07/13 01:39
→ loveme00835:性, 不 include 就能用那等於把相依性藏起來了, 你乾 07/13 01:42
→ loveme00835:脆實作全寫在 header 裡 07/13 01:42
→ linotwo:多一個 param.c 專門放參數的實體 07/13 08:13
→ linotwo:各個 cpp 要用的時候用 extern 的方式去 link 07/13 08:14
→ james732:不過那行 extern 還是要每個檔案都加上去...XDDD 07/13 09:07
→ diabloevagto:看來我應該在每個cpp都include,這樣比較能表示相依 07/13 14:45