看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《mida (實況「野球」魂)》之銘言: : 所以我應該要怎樣修正,可以讓這2個程式可以共用MyLib.lib, : 而MyApp1.exe看不到也不會include Function2, : 但MyApp2.exe則可以呢? : 而且前題是MyLib.lib, MyApp1.exe, MyApp2.exe修改好後,不用在額外改code, : 各compile一次就可以達到這樣的目標呢? 方法就像推文中所說的那樣,在 compile MyLib 的時候加入 __INCLUDE_FUN2__, 這麼一來 MyLib 裡面會有 Function2() 的定義。(MyApp2要用的) 然後在 compile MyApp1 的時候,不要加入 __INCLUDE_FUN2__, 這麼一來 MyApp1 將無法呼叫 Function2()。 不過,奉勸你不要做這種事。 上述的法方之所以可行,是因為 Library 中添加 function 這件事是向上相容的, 也就是說多了 Function2 的 MyLib 相容於沒有 Function2 的版本 因此 MyApp1 才能正常使用。 但是許多對 Library 的修改並無向上相容,比如說: class MyLib2 { public: int Function1(); #ifdef INCLUDE_NAME std::string name; #endif }; 很不幸的,這種情況下同一招不管用, 因為一來 MyLib2 這個 class 在不同的情況下會有不同的大小, 另一方面,在含有 name 這個 member variable 的情況下, 建立物件時需要呼叫 ctor, 而不含任何 member variable 的時候 compiler 通常會省略 ctor。 建議你把會變動的部份獨立成另一個函式庫, 否則很容易踩到這種地雷。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.15.163
mida:謝謝說明,我本來以為我遇到的問題很單純所以想了我前篇po的 07/14 19:27
mida:例子來發問,但經過你一解釋,我發現我現在遇到的case剛好是 07/14 19:28
mida:你說的地雷.....囧,看來要新建Lib比較實際。 07/14 19:28