: 若是 Hello.CPP
: main() { printf("hello world"); }
: 則 compile 無法通過
: 請注意:
: 第一個例子在 C++ compiler 一樣可以執行
: 可見差異不在 compiler,而在副檔名為 .C 或 .CPP
--
[31;1m Nan [31;0m
[m [1;36m※ 來源:‧輔大美少女夢工場 bbs.secc.fju.edu.tw‧[FROM: prj92.csie.fju.] [m
奇怪的很, 我用g++跑的好好的,
有一個warning (printf() w/o #include <stdio.h>)
但跑起來沒有問題...
所以這跟您使用那一種compiler有關, 跟 c/c++ 無關...
請再舉其它的例子...
--
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>
若大家要很明顯的編不過去的例子,前面已經有
(void *) 不能直接指定給別種指標(such as "char *") ,
一定要經形態轉換,在 ansi c 卻可以指定的實例 ,
然而有人不明究理,以為是程式風格的問題,
其實這是c++ 作者提到的不相容例子之一。
我舉另一個慘痛的例子好了:
in ANSI-c :
void try(void) { }
就這樣.... :)
--
。白衣怪人 : 超怪語(無法抵擋) , 瞬間移動 , 物質轉換
。恐怖大王 : 從天而降 , 召喚異形座騎 , 莫扎特 ...
--
※ 星際個體: [1;33;41m未來 [1;32;44m最舊 [1;33;40m小棧 [m [0;32m◆ From: Ofo.m8.ntu.edu.t
[1;41;37mO [33;44mf [32;41mO [1;36;40m Birding [33m.m8.ntu.edu.tw (140.112.251.84) [m
> 因為 C compiler會 自動 include <stdio.h>,大概
> 是幾乎所有的program都要include <stdio.h>
> 而C++ compiler,就不知道要include <stdio.h> 還是 include <iostream.h>
抱歉修正一下您的觀念
上例在 C 能 compile 是因為它對沒有宣告的函數
皆假設為傳回 int 而參數照傳不檢查
C++ 則不允許不宣告,使型別檢查更嚴格,較有保障
這是一個很好又很直接的例子
不過還好,如果是舊程式碼重新 compile 的問題,並不會造成慘痛結果
因為您的舊程式碼一定是 XXX.C 吧,不要改成 XXX.CPP 都還能 compile
其實我以前寫的 ANSI-C 程式在換成 C++ compiler 後都還能編譯
真的讓我嚇了一跳,都要歸功於 C 非常標準 (以及我的好習慣,嘻)
反觀最近在 Borland C++、Visual C++寫的程式都很難維護
要用
#include <vector.h>
還是
#include <vector>
還有
map<int,int>可不可以用?還是要 map<int,int,less<int>,less<int> >
此外一堆 string、CString、TString、ANSIstring
連最基本的字串都不知道要用哪個了...
(唉,標準的 string 很陽春,在 MFC 又都是 CString
CString constructor 又不提供和 string 的轉換
一定要用 string::c_str() 和 LCPTSTR 害我的程式非常不好 porting)
雖然都可以解決,但是就是覺得不悅...