作者shiengchyi (上班族之朝九晚六?!)
看板LinuxDev
标题[问题] GCC 呼叫其他.c的程式
时间Tue Mar 22 11:06:25 2011
举例来说,Main.c 需要使用到Test.c当中的Function A、Function B,
那除了把Test.c 做成 Test.a之外,
还要在Test.h当中把有用到的Function都写出来 (EX:Void A(); Int B(); )
我想请问的是有方法可以直接把所有在Test.c的Function都拿来用(里面大部分有用到),
而不需要再一条一条的写在Test.h里面吗?
Test.c里面的Function还有其他的程式会使用到
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.221.67.235
※ 编辑: shiengchyi 来自: 61.221.67.235 (03/22 11:08)
※ 编辑: shiengchyi 来自: 61.221.67.235 (03/22 11:10)
1F:→ james732:可以的话就不需要stdio.h这种东西了...XD 03/22 11:14
2F:→ james732:其实可以用dlopen, dlsym之类的函式,但是更复杂了 03/22 11:16
3F:推 coldnew:#include "Test.c" but it's not a good way.... 03/22 11:18
5F:→ shiengchyi:感谢解答 XD 我还是先乖乖用.h好了 03/22 11:32
6F:推 askacis:懒人大法就是用extern,让gcc 在linking再去找你的function 03/22 13:03
7F:推 lausai:函式不需要extern吧 不是预设就external linkage? 03/22 18:48
8F:推 askacis:因为原po 在main.c 呼叫test.c里的function,所以写extern 03/22 20:53
9F:推 askacis:不然你会在compile的时候看到一堆warning... 03/22 21:06
10F:推 askacis:也是因为有些Team比较龟毛,有warning就不让你编译下去了XD 03/22 21:13
11F:推 lausai:我的意思是宣告函式时它就已经是extern了 根本不需要再写 03/22 21:39
12F:推 lausai:extern 编译器本来就会去各个object file搜寻函式定义 03/22 21:42
13F:→ lausai:上面笔误 应该是连结器(linker)去搜函式定义 03/22 21:43
14F:推 askacis:所以我说啦,你在main.c要用test.c的函式的时最好用extern 03/22 22:56
15F:→ askacis:带进来该函式才不会有一堆warning,特别是一堆API介面的时 03/22 22:57
16F:→ askacis:你不include该API的h档,又不在main.c用extern,会就看到一 03/22 22:57
17F:→ askacis:堆warning跑出来,龟毛的build rule喷warning就不让你编了 03/22 22:59
18F:→ i386:option没下 -Wall应该看不到这个warning吧??? 03/23 13:19
19F:→ i386:另外,出现warning後就不能编下去,应该是下了 -Werror 这个 03/23 13:21
20F:→ i386:option.. 03/23 13:21
21F:→ shiengchyi:再问个问题,如果要用多个.c档,可以并成一个.h吗?! 03/23 14:46
22F:→ shiengchyi:EX 用到TestA.c TestB.c -> TestA.o TestB.o ->Test.a 03/23 14:47
23F:→ shiengchyi:这样再加上Test.h,Main.c就可以使用TestA.c TestB.c 03/23 14:48
24F:→ shiengchyi:里面的Function,可以这样使用吗? 03/23 14:48
25F:→ james732:可以 03/23 20:57
26F:→ shiengchyi:感谢 ^___^ 03/24 10:23