推 legnaleurc:呃,C的部分不用 extern,是 C++ 用到 C 的東西才要 06/09 21:56
→ legnaleurc:extern "C",你的作法好像反過來了 06/09 21:56
→ legnaleurc:有興趣去查一下 name mangling 06/09 21:57
→ QQ29:喔不是啦 我用VC8寫應該就是c++吧 只是我故意把檔名打成.c 06/09 22:02
→ QQ29:只是會出現那個錯誤.... 剛剛google找到另一個寫法寫在main() 06/09 22:03
→ QQ29:extern "C"{ #include "test.h"}....超奇怪 就過了 06/09 22:03
→ QQ29:不過 我再另一個.cpp 定義同樣名字的foo 也不會造成重複宣告 06/09 22:03
→ QQ29:讓我感到很疑惑 我又在main上方在宣告一次void foo();了 06/09 22:04
推 zlw:VC不是看副檔名的,屬性->C/C++->進階->編譯為->選C或C++決定 06/09 22:22
→ zlw:你一樣可以開個專案,檔名叫.c,但是編譯成C++ 06/09 22:23
→ QQ29:我是看1154那篇講的耶 而且我寫.c 他就認不到這函式 06/09 22:27
→ QQ29:.cpp就ok@@ 06/09 22:27
→ QQ29:我看了我專案屬性是填編成C++沒錯 但是副檔名好像會影響! 06/09 22:29
→ QQ29:但我不是很清楚 所以請大家指導 06/09 22:30
推 littleshan:VC 是會看副檔名的,如果你直接呼叫 cl.exe 的話 06/09 22:32
推 zlw:嗯,大概是用IDE的時候,專案屬性的設定會優先拿來看 06/09 22:33
→ zlw:專案屬性可以是C++,然後專案裡的某個123.cpp再屬性設成C也行 06/09 22:34
→ QQ29:不過位啥我會出現那個奇怪的 error呢? 還有什麼是呼叫cl.exe 06/09 22:38
推 zlw:extern "C"主要是給C++拿來用,{}裡面應該主要是放函數宣告 06/09 22:39
→ zlw:struct不是函數,應該不用吧(沒試過)。 06/09 22:40
→ QQ29:我是這樣寫阿 但是那個錯誤我就不懂為什麼了 改成我推文的包 06/09 22:56
→ QQ29:法 就可以成功 但是推文的包法 就是包全部.h的內容的感覺 06/09 22:56
→ akasan:如果是實作用C用的header檔裡面用#ifdef __cplusplus 06/09 23:12
推 zlw:呃...我拿你原文的去編譯看看,可能有IDE視覺效果比較好,才發 06/09 23:12
→ akasan:把extern "C"包起來 06/09 23:12
→ zlw:現是你的extern "C"用法錯誤,他是給C++用的,你不能在C裡用 06/09 23:13
→ zlw:你的test.c有include到test.h,就會把extern "C"加進去 06/09 23:13
→ QQ29:謝謝不過 1154那篇 為什麼最後說把header宣告包起來呢! 06/09 23:43
→ QQ29:一定會有.c去include不是嘛@@ 06/09 23:44
→ tinlans:你真的有搞懂 extern "C" 是做什麼的嗎? 06/09 23:51