作者ric2k1 (Ric)
看板EE_DSnP
標題Re: 請教一個問題
時間Sat May 31 21:19:48 2008
: 我想請問 我現在假如在aig這個file裡面放兩個檔案 aiger.h aiger.c
: 然後我想要在cir這個file 的 cirInterface.cpp裡面去用 aiger.h 裡面的函式或struct
:
: 那我大概這樣寫:
:
: extern "C"{
: struct aiger;//這是我想用的struct
: const char *aiger_open_and_read_from_file(aiger *, const char *);
: //這是我想用的函式
: }
:
: int
: aigToCir (const char *fileName)
: {
: aiger * aigerPtr = new aiger;
: aiger_open_and_read_from_file(aigerPtr, fileName);//我想用這個aiger去吃
: ......
: }
這個作業的目的之ㄧ就是要考驗大家對於 variable/class/function
"declare", "define", "instantiate" 與 "operate" 的觀念.
題目規定不可以在 cir 中 include "aiger.h", 所以你不可能讓 cir 的 function
"看見" aiger.h 裏面 struct 的定義, 比方說 "struct aiger".
所以上面這行:
aiger * aigerPtr = new aiger;
當然是會 compile 不過!
(觀念: 必須在目前的 scope 裡面看得到 struct aiger 的定義才可以 instantiate
struct aiger 的物件, 不管是 "aiger aigObj" or "aiger *aigerPtr = new aiger".)
所以: (考驗) aigerPtr 要在哪裡 instantiate 呢?
此外, 在 cir 裏面既然看不到 struct aiger, 也不能宣告 aiger 的物件,
(想一想) cir 的 function 裏面可以看的到 aiger* 的變數嗎?
可以將 aiger* 的變數當做 function call 的參數嗎?
可以直接 operate on aiger* 的變數嗎?
(Hint: 上面的三個問題有兩個 yes, 一個 no)
所以,
(關鍵) 在 cir 裏面要如何"拿到" aiger* vaiable 裡的東西(比方說 number of PIs)?
要如何才能操作 aiger* 的 variable 呢?
:
: 我想請問
: 在不改cir 和 aig 這兩個file的makefile的情況下
: cir 可以看到aig 這個file的 .h .c檔 然後extern 可以抓到我要的東西嗎?
: 我發現似乎是不行...它好像看不到放在aig資料夾的.c .h檔 ...
不行的.
:
: 請問該如何解決呢? 還是我的想法&用法根本就是錯的orz..
你可以考慮在 aig package 裡加入一些 "interface functions", 讓 cir 可以不用
透過 include "aiger.h" 也能對 aiger* 的物件進行操作... (說得太明了...)
:
※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 219.68.89.39
: 推 trancewu:因為Makefile中的"EXTHDRS"不可以改,所以找不到aiger.h 05/31 17:15
沒錯!
: → battlecruise:那位什麼呼叫aiger.h的 function 是ok的? 05/31 17:40
要用 extern "C" 吧!?
"extern" 的意義就是告訴 compiler 在 compile 目前這個檔案時若有一些
function 的定義找不到沒有關係, 因為它是定義在 "external" 的檔案裡.
重點是 linking 時要將這些 undefined 的 symbol 全部都 resolve 掉,
否則你就會看到 "xxxx undefined" 這樣的 linking error...
: 推 bnsblue:不知道能不能把aiger.h link放在include裡面.. 05/31 19:17
: → bnsblue:這應該沒有禁止? 05/31 19:17
這個是禁止的!!
: 推 bnsblue:阿歹勢我好像搞錯問題了!? 05/31 19:27
: → battlecruise:啊 所以好像有些動作必須要在aig.h做... y 05/31 19:56
: → battlecruise:更正 aig 的資料夾 05/31 19:56
是的, 請見 1300 篇的規定!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.132.98
※ 編輯: ric2k1 來自: 59.121.132.98 (05/31 21:30)
1F:推 trancewu:為什麼我覺得三個都是NO...orz 05/31 22:25
2F:→ ric2k1:Hint: extern aiger*...? 05/31 22:28
3F:推 battlecruise:太感謝了!!! 06/01 01:36
4F:推 trancewu:可是不是沒有include aiger.h,所以不知道aiger的內容 06/01 02:30
5F:→ trancewu:這樣還可以用pointer去使用aiger裡的物件嗎@@ 06/01 02:31