C 我想這樣用(二)

2022-08-29 19:51:24 字數 1522 閱讀 6172

話接上篇,從純c環境轉c++環境需要注意些什麼呢?

沒錯,雖然c++曾號稱相容c,而且很多人甚至覺得c就是c++子集,但是c腦殘粉一定知道,兩者有很大的不同!

下面這些要點是比較突出的,後期我再補充其他的:

1.關於型別轉換

c是弱型別的,至少比c++弱,在c下面很多態別轉換我們不怎麼管,編譯器也會預設,最多有些討厭的編譯器(如某軟家的)會給出警告,但是在c++下面就不一樣了,這些都是error!!你不顯示宣告,就別想跨型別!!其實這也是好事,多打幾個字母,反而**清晰了嚴謹了:)

example

在c裡,你這樣寫:

int* p;

p = malloc(10 * sizeof(int));

在c++裡,你必須這樣寫:   

int* p;

p = (int *)malloc(10 * sizeof(int));

2.關於字元陣列

在c裡,你可以宣告乙個字元陣列,長度正好是串長,即:沒有地方放『\0』,但在c++裡,你不能這樣做:

char s[3] = "abc";(在c裡正確,在c++裡錯誤)。

我的建議是:如果你是個正常的人類,就是在c裡面你也會寫成:

char s[4] = "abc";

不過其實最好的寫法是:

char s = "abc";

不是嗎??

3.關於巢狀的型別定義

example

struct s b;

int c;

enum e e;

};struct t x;

enum e y;

上述**在c裡面沒問題,這是因為s、t、e三者的作用域(scope)相同,但是在c++裡,確實是錯誤的!在c++裡,t和e的作用域是在s裡的,想在外面使用只能s::t,這涉及到命名空間的問題,我們以後再說。

不過就算在c裡,我也會把e和t單獨拿出來定義,這種巢狀的寫法,總有鳩佔鵲巢的感覺~~

4.關於列舉型別

我們都知道,在c裡面列舉和整型是一樣的,列舉就是整型,於是我們這樣幹:

enum rgb rgb;

++rgb;

哦,看吧,世界多美好。然而c++的世界是殘酷的,列舉是獨立的型別,且不支援++這類整數操作符。於是你說沒關係:"rgb=rgb+1;"就好了。很可惜。又錯了。。。是的,因為沒有顯示的進行型別轉換,於是正確的寫法:

enum rgb rgb;

rgb = rgb(rgb + 1);

雖然有的長,不過還好啦,如果你的強迫症已經達到神級了,那麼也有辦法,給rgb加上++運算子的過載吧,具體內容以後說。

5.關於注釋

//和/**/的雙注釋方案早就被c採用了,所以其實沒啥特別要注意的,不過你非要這樣寫的話:

i = j //* comment */ k ;

那麼連上帝也幫不了你了= =!

這次就寫這麼多了,下次繼續補充~~

Linux 協程是不是我想的這樣

最早知道的概念是程序 每個程序裡面的執行單元是執行緒 乙個程序肯定有乙個主線程 也可以開出一些子執行緒 這倆都是作業系統控制的 協程是啥概念?在乙個執行緒裡面如果開啟了乙個協程 這個主線程就會被阻塞到協程裡面去 協程執行完 再回到主線程 這個好 和執行緒的阻塞還不一樣 執行緒是被作業系統核心所阻塞的...

我想更深入c

因為有一點學c的經歷,因此對於我剛入大學學c 而言也算有一點基礎,但是我並不想滿足於此。記錄一下自己的一些小錯誤,不想以後再犯,也想藉此更深入的學習c 最後宣告一下 如果出現如低階錯誤等等各位看不慣的地方,求輕拍 首先是這道題 我最初的想法是這樣的 這道題我最後需要輸出 然後只有最後一項需要小於10...

ok我想獲得C幣

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...