※ 引述《seagal.bbs@ptt.cc (待救的小米)》之銘言:
> 謝謝您的回答
> 但這不是我的問題
> 我的問題是
> 請問有人能告訴我C/C++該如何區分嘛?我是否不該武斷的講 這隻程式用C寫的
如果一個人只用 C++ 的 C subset 來寫程式,
你還是可以從一些地方看出端倪,
最主要的是 C++ 是一個強型別檢查的語言,
這和 C 大大的不同,
使用 C 寬鬆型別檢驗特性所撰寫的程式碼無法在 C++ 生存,
光從這一點就能判定該程式是否為 C 或 C++ 程式。
除此之外,
C++ 的爸爸建議大家使用比較醜陋的轉型運算子,
以突顯該部分是有可能出現問題的程式碼,
所以也能從程式碼裡面是寫 static_cast<char>(i) 還是 (char)i 看出來,
不過因為 C++ 對後者還是有相容,
所以這一點只能當作判定的參考,
並不能說使用 (type) 做 casting 的程式就不是 C++ 程式。
> 以及為什麼需要header file呢?
header file 主要是放一些常數定義,
還有變數及函式的「宣告式」,
struct、union 和 class 的「定義式」,
inline function 的「定義式」等等...
為的當然是不希望在每個編譯單元裡由撰寫程式者複製貼上或手工重打一遍,
因為既然是共用的東西,當然要維護它的一致性,
免得改了一邊忘了改另一邊,造成錯誤發生。
> 我無意要引起OO與非OO的論戰(我一開始就知道會戰起來 因此我強調是個人偏好)
> 我的疑問在於
> 友人A認為C是C++的子集合
> 因此每一隻C程式 都可以視為是C++
不,C++ 的確有「C 子集 (C subset)」這種名詞的存在,
然而它並非是整個 C 的 set,
正如第一段回文所說,
利用 C 寬鬆型別檢驗特性所撰寫出來的程式不是 C++ 程式。
> 聽起來很詭辯 但我實在沒有辦法想出為什麼不是這樣
> 就好比人類是動物的子集合
> 動物包含人類 貓 狗...
> 因此每個人類都是動物
> 這 太詭異了
這是比喻失當所造成的困惑,
不過比喻失當的原因在於你被「C++ 完全包含 C」的言論所誤導了...
如果你想進一步知道 C 和 C++ 的不同點,
可以看看 Incompatibilities Between ISO C and ISO C++ 這篇:
http://david.tribble.com/text/cdiffs.htm
--
※ Origin: 交大資工鳳凰城資訊站 <bbs.csie.nctu.edu.tw>
◆ From: 218-171-158-53.dynamic.hinet.net