Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

C的程式並不是都能拿到C++執行吧........

0 views
Skip to first unread message

愛睡的小孩

unread,
Jan 7, 1998, 3:00:00 AM1/7/98
to

【 在 tljhl...@bbs.ccu (小寫的 'i') 的大作中提到: 】
: On 30 Dec 1997 01:30:55 GMT, Hala...@cis.nctu.edu.tw (滿足現況...:P) wrote:
: > 可不可以舉別的? 說明 c 為何不能在 c++ 跑呢?
: 我來舉一個例子好了
: Hello.C
: main() { printf("hello world"); }
: 在 C 是可以接受的,可以 compile run 出正確結果
: 有兩個Warnings:
: 沒有 return 值,printf 沒有 #include <stdio.h>
如果在CPP內,加上return value & include <stdio.h>就可以跑了。
因為.c 和 .cpp 在一些compiler中(like borland Turbo C++ v3.0)
是由不同的compiler來compile的,所以對一些細節會因compiler不同而有不同的行為

其實兩邊都不能跑才對,只是因為 C compiler會 自動 include <stdio.h>,大概
是幾乎所有的program都要include <stdio.h>
而C++ compiler,就不知道要include <stdio.h> 還是 include <iostream.h>
^^^^^^^^^^^^^^^^^^^^
有點忘了 :P
SO...

: 若是 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

歹戲拖棚

unread,
Jan 7, 1998, 3:00:00 AM1/7/98
to

==> 在 tljhl...@bbs.ccu.edu.tw (小寫的 'i') 的文章中提到:

> 我來舉一個例子好了
> Hello.C
> main() { printf("hello world"); }
> 在 C 是可以接受的,可以 compile run 出正確結果
> 有兩個Warnings:
> 沒有 return 值,printf 沒有 #include <stdio.h>
> 若是 Hello.CPP
> main() { printf("hello world"); }
> 則 compile 無法通過

奇怪的很, 我用g++跑的好好的,
有一個warning (printf() w/o #include <stdio.h>)
但跑起來沒有問題...

所以這跟您使用那一種compiler有關, 跟 c/c++ 無關...

請再舉其它的例子...
--
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>

白 衣 者

unread,
Jan 7, 1998, 3:00:00 AM1/7/98
to

※ 引述《Traff...@cis.nctu.edu.tw (歹戲拖棚)》之銘言:
: ==> 在 tljhl...@bbs.ccu.edu.tw (小寫的 'i') 的文章中提到:

: > 我來舉一個例子好了
: > Hello.C
: > main() { printf("hello world"); }
: > 在 C 是可以接受的,可以 compile run 出正確結果
: > 有兩個Warnings:
: > 沒有 return 值,printf 沒有 #include <stdio.h>
: > 若是 Hello.CPP
: > main() { printf("hello world"); }
: > 則 compile 無法通過
: 奇怪的很, 我用g++跑的好好的,
: 有一個warning (printf() w/o #include <stdio.h>)
: 但跑起來沒有問題...
: 所以這跟您使用那一種compiler有關, 跟 c/c++ 無關...
: 請再舉其它的例子...

若大家要很明顯的編不過去的例子,前面已經有
(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

小寫的 'i'

unread,
Jan 8, 1998, 3:00:00 AM1/8/98
to

==> 在 chiu...@bbs.secc.fju.edu.tw (愛睡的小孩) 的文章中提到:

> 【 在 tljhl...@bbs.ccu (小寫的 'i') 的大作中提到: 】
> : On 30 Dec 1997 01:30:55 GMT, Hala...@cis.nctu.edu.tw (滿足現況...:P) wrote:
> : Hello.C
> : main() { printf("hello world"); }
> : 在 C 是可以接受的,可以 compile run 出正確結果
> : 有兩個Warnings:
> : 沒有 return 值,printf 沒有 #include <stdio.h>

> 因為 C compiler會 自動 include <stdio.h>,大概


> 是幾乎所有的program都要include <stdio.h>
> 而C++ compiler,就不知道要include <stdio.h> 還是 include <iostream.h>

抱歉修正一下您的觀念
上例在 C 能 compile 是因為它對沒有宣告的函數
皆假設為傳回 int 而參數照傳不檢查
C++ 則不允許不宣告,使型別檢查更嚴格,較有保障

小寫的 'i'

unread,
Jan 8, 1998, 3:00:00 AM1/8/98
to

==> 在 lax...@Birding.m8.ntu.edu.tw (白 衣 者) 的文章中提到:

> 我舉另一個慘痛的例子好了:
> in ANSI-c :
> void try(void) { }
> 就這樣.... :)

這是一個很好又很直接的例子

不過還好,如果是舊程式碼重新 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)

雖然都可以解決,但是就是覺得不悅...

Roland

unread,
Jan 8, 1998, 3:00:00 AM1/8/98
to

==> 在 tljhlin@cis_nctu (小寫的 'i') 的文章中提到:

> ==> 在 chiu...@bbs.secc.fju.edu.tw (愛睡的小孩) 的文章中提到:
> > 【 在 tljhl...@bbs.ccu (小寫的 'i') 的大作中提到: 】
> > 因為 C compiler會 自動 include <stdio.h>,大概
> > 是幾乎所有的program都要include <stdio.h>
> > 而C++ compiler,就不知道要include <stdio.h> 還是 include <iostream.h>
> 抱歉修正一下您的觀念
> 上例在 C 能 compile 是因為它對沒有宣告的函數
> 皆假設為傳回 int 而參數照傳不檢查
> C++ 則不允許不宣告,使型別檢查更嚴格,較有保障
是啊!!宣告函數原型,是一個很好的習慣.否則,程式錯在那裏都不知道哦...
0 new messages