Re: [問題] extern "C"的問題

看板C_and_CPP (C/C++)作者 (洞房不敗)時間16年前 (2009/06/10 06:03), 編輯推噓3(3011)
留言14則, 2人參與, 最新討論串2/5 (看更多)

06/09 23:43,
謝謝不過 1154那篇 為什麼最後說把header宣告包起來呢!
06/09 23:43

06/09 23:44,
一定會有.c去include不是嘛@@
06/09 23:44
原文太亂,簡單整理一下好了,部份內容也許有錯,保持懷疑態度觀看即可 確定搞懂這些觀念: 1. 函數定義、函數宣告 為何 2. 為何有 函數只能定義一次,但可宣告多次 的說法 3. 標頭檔的目的,以及編譯器如何處理 4. 假設 某外部函數 沒有原型宣告,為什麼仍可呼叫他 (連結器;C與C++) 5. 函數重載是什麼、C++為什麼可以、C為什麼不可以 6. extern 與 extern "C",如何影響編譯器、連結器的行為 -- 你的 test.h 裡面內容應該是 test.c 裡面函數的原型宣告。 其他人 需要呼叫 test.c 裡的函數時,才 include 之。 因此 main.cpp 應該 include 而 test.c 不需要 include ※ 以下 AM 12:57 修文補充: 此例中的 test.c 程式碼裡,可以『不需要』include "test.h" 也能正常編譯。 但在程式開始把 test.h 編譯進去還是比較適當、妥善的作法。 -- 你想要用 C++ 程式碼 呼叫「C 的程式碼所撰寫、編譯的函數」 所以在 main.cpp 要 include 其原型宣告所在時 必須做 extern "C"{ #include "test.h" } -- 文件: http://blog.anglee.org/2007/02/extern-c.html (寫的比較亂,但有完整範例收集) http://blog.csdn.net/wfwd/archive/2006/05/30/763734.aspx http://en.wikipedia.org/wiki/Name_mangling -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.128.232 ※ 編輯: zlw 來自: 124.8.128.232 (06/10 06:09)

06/10 12:08, , 1F
謝謝 我問一下 因此 main.cpp 應該 include 而 test.c 不需要
06/10 12:08, 1F

06/10 12:08, , 2F
這樣意思是 如果我test.c要用到typedef struct xxx;
06/10 12:08, 2F

06/10 12:09, , 3F
我struct定義必須寫在.c裡面而 .h只能夠寫宣告 使得.c不必
06/10 12:09, 3F

06/10 12:09, , 4F
include .h~~這樣嗎? 不過我不太知道怎麼寫宣告struct
06/10 12:09, 4F

06/10 12:10, , 5F
如果是class 我就直接寫 class A;這樣...struct不清楚耶!?
06/10 12:10, 5F

06/10 12:23, , 6F
剛剛亂寫結果是 typedef struct FOO{}F; .h就只寫struct F;
06/10 12:23, 6F

06/10 12:23, , 7F
就可以了!!
06/10 12:23, 7F

06/10 12:45, , 8F
struct就視為class處理,如果是這種狀況,就把struct放test.h
06/10 12:45, 8F

06/10 12:46, , 9F
test.c再去include "test.h"
06/10 12:46, 9F

06/10 12:48, , 10F
我原本意思是.c不必include一個標頭檔,內容裡都是自己的宣告
06/10 12:48, 10F

06/10 12:49, , 11F
現在仔細想想,這也不對,因為.c檔裡如果也有function call是
06/10 12:49, 11F

06/10 12:49, , 12F
用到定義在很後面的函數,這時候一開始把原型宣告放進就有必要
06/10 12:49, 12F
※ 編輯: zlw 來自: 124.8.128.232 (06/10 12:58)

06/10 13:27, , 13F
我現在把struct定義寫在.c .h只有寫struct 宣告 這樣ok耶
06/10 13:27, 13F

06/10 13:28, , 14F
這樣.c就不用include .h了的樣子
06/10 13:28, 14F
文章代碼(AID): #1ABjnApa (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 5 篇):
文章代碼(AID): #1ABjnApa (C_and_CPP)