[問題] 將cpp程式包成.o檔,給予c主程式使用[已解決]

看板C_and_CPP作者 (邪月)時間13年前 (2012/08/29 17:01), 編輯推噓10(10017)
留言27則, 10人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC, Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 因為公司想使用hash table的功能, 我在網路上搜尋一下c寫的hash table都沒有c++的map好用! 所以我打算把cpp的程式包成.o,讓c去使用(前輩很堅持要用c..) 目前在compiler階段就錯了! 錯誤結果(Wrong Output): Map.h:4: 錯誤:expected identifier or 「(」 before string constant main.c: In function 「main」: main.c:6: 警告:隱含宣告函式 「map_insert」 make: *** [main] Error 程式碼(Code):(請善用置底文網頁, 記得排版) Map.h #ifndef MAP_H #define MAP_H extern "C"{ void map_insert(char* SrcKey,char* SrcVal); }; #endif Map.cpp #include "Map.h" #include <map> #include <iostream> using namespace std; map<char*,char*> mymap; void map_insert(char* SrcKey,char* SrcVal) { mymap.insert( pair<char*,char*>(SrcKey,SrcVal) ); } main.c #include <stdio.h> #include "Map.h" int main() { map_insert("key","value"); return 0; } 補充說明(Supplement): makefile的內容是 CC=gcc -Wall -Wextra CPLUS=g++ -Wall -Wextra main:clean map $(CC) main.c Map.o -o main.out map:Map.h Map.cpp $(CPLUS) -c Map.cpp clean: rm -f *.o *.out -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.220.204.217 ※ 編輯: angleevil 來自: 61.220.204.217 (08/29 17:02) ※ 編輯: angleevil 來自: 61.220.204.217 (08/29 17:06)

08/29 17:41, , 1F
C 沒有 extern "C" ... 用 macro 避開吧
08/29 17:41, 1F

08/29 17:45, , 2F
厄..不會是要我把map_inset的函式改成巨集吧.
08/29 17:45, 2F

08/29 17:47, , 3F
#ifdef __cplusplus(換行)extern"C"{(換行)#endif 這樣
08/29 17:47, 3F

08/29 17:49, , 4F
兩回事,請 google 找 __cplusplus 看第一篇
08/29 17:49, 4F

08/29 18:50, , 5F
最後用 c++ linker
08/29 18:50, 5F

08/29 21:38, , 6F
$(CPLUS) main.c Map.o -o main.out<--今天有這樣用!
08/29 21:38, 6F

08/29 23:36, , 7F
map 不是hash table,是tree
08/29 23:36, 7F

08/29 23:56, , 8F
請使用 unordered_map
08/29 23:56, 8F

08/30 01:23, , 9F
I know it is a tree.But I focus on compiler! I hate
08/30 01:23, 9F

08/30 01:24, , 10F
my coworker limit a c language.
08/30 01:24, 10F

08/30 01:27, , 11F
我記得很久以前,也有人討論這個! 有人知道哪篇嗎?
08/30 01:27, 11F

08/30 01:42, , 12F
照著前幾樓的去 google 一點也不難, 加油好嗎?
08/30 01:42, 12F

08/30 01:42, , 13F

08/30 02:32, , 14F
厄! sorry! 我會加油的!
08/30 02:32, 14F

08/30 02:53, , 15F
我想問堅持用 c 的理由 XD
08/30 02:53, 15F

08/30 03:02, , 16F
推板主
08/30 03:02, 16F

08/30 08:14, , 17F
不想用和學c++阿~~這個在業界很常發生!
08/30 08:14, 17F

08/30 16:55, , 18F
我以為現在的情況是,c再強不會c++很沒競爭力 Orz
08/30 16:55, 18F

08/30 17:00, , 20F
C++ 自己都沒競爭力了
08/30 17:00, 20F

08/30 17:42, , 21F
TIOBE ,C/C++ 曲線拿來看是有點讓我嚇到..
08/30 17:42, 21F

08/31 03:04, , 22F
看領域吧?像圖學用到CGAL的話一定要用C++
08/31 03:04, 22F

08/31 09:32, , 23F
c++ 的問題一直是爭議性很大的點,回歸到最後! 幾乎是
08/31 09:32, 23F

08/31 09:34, , 24F
無法有效掌握它導致的! oo還是習慣java 程序還是c
08/31 09:34, 24F

08/31 09:35, , 25F
至於前輩們不想學很正常,如果我不是先碰c++,我也沒動力
08/31 09:35, 25F

08/31 09:36, , 26F
接觸其他語言,不論哪種語言(除非一開始有碰c java)
08/31 09:36, 26F

08/31 09:37, , 27F
不然去學c++,成本督過高了!
08/31 09:37, 27F
文章代碼(AID): #1GFTfmiB (C_and_CPP)
文章代碼(AID): #1GFTfmiB (C_and_CPP)