作者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