C和C++的一些筆記

gcc和g++的差異

最早以前只有GCC(GNU C Compiler),后來隨著語言的發(fā)展妆绞,GCC包含了越來越多的語言(后來開發(fā)語言也變?yōu)榱薈++)。

現(xiàn)在gcc和g++的最主要區(qū)別是在于鏈接的時候選擇的庫不相同陨收,gcc鏈接c語言庫势告,g++鏈接c++語言庫,但是編譯的時候兩者都是可以的原叮。

舉例說:

  1. gcc將*.c/*.cpp各自當(dāng)做c語言和c++語言編譯(只是鏈接的時候又要去調(diào)用g++)赫编。
  2. g++將*.c/*.cpp都當(dāng)做c++語言編譯巡蘸。

平時用的時候,只要.c文件用gcc擂送,.cpp文件用g++就好了悦荒。

此外,GCC是非常通用的編譯器嘹吨,基本支持所有標(biāo)準(zhǔn)搬味。

舉例說:

  1. C99, C11是C語言的現(xiàn)在標(biāo)準(zhǔn),然而在VC中依然無法完全支持C99和C11蟀拷,采用的是C89(ANSI C)標(biāo)準(zhǔn)身腻。例如,變量只能在開頭定義匹厘。
  2. C++11,C++14也同樣如此嘀趟。

C和C++的一些區(qū)別

以下內(nèi)容來自維基:

C++有時被認(rèn)為是C的超集,但這并不嚴(yán)謹(jǐn)愈诚。
各個版本的ISO/IEC 14882的附錄C中都指出了C++和ISO C的一些不兼容之處她按。
大部分的C代碼可以很輕易的在C++中正確編譯,但仍有少數(shù)差異炕柔,導(dǎo)致某些有效的C代碼在C++中失效酌泰,或者在C++中有不同的行為。
最常見的差異之一是匕累,C允許從void*隱式轉(zhuǎn)換到其它的指針類型陵刹,但C++不允許。下列是有效的C代碼:

/* 從 void * 隱式轉(zhuǎn)換為 int * */
int * i = malloc(sizeof(int) * 5);

但要使其在C和C++兩者皆能運作欢嘿,就需要使用顯式轉(zhuǎn)換:

int * i = (int *)malloc(sizeof(int) * 5);

另一個常見的可移植問題是衰琐,C++定義了很多的新關(guān)鍵字,如new和class炼蹦,它們在C程序中羡宙,是可以作為識別字(例:變數(shù)名)的。

C99去除了一些不兼容之處掐隐,也支持了一些C++的特性狗热,如//
注解,以及在代碼中混合聲明虑省。不過C99也納入幾個和C++沖突的新特性(如:可變長度數(shù)組匿刮、原生復(fù)數(shù)類型和復(fù)合逐字常數(shù)),而C++11已經(jīng)加入了兼容C99預(yù)處理器的特性探颈。

由于C++函數(shù)和C函數(shù)通常具有不同的名字修飾和調(diào)用約定熟丸,所有在C++中調(diào)用的C函數(shù),須放在extern "C" { /* C函數(shù)聲明 */ }之內(nèi)膝擂。

對上述的話虑啤,我做了一番測試隙弛,我的GCC版本為4.8.4。

  1. void* 和int *的隱式變換確實依舊問題存在狞山,c無法在c++下正確運行全闷。
  2. 但是可變長度數(shù)組在C下可以編譯運行,同時萍启,也能在c++下編譯運行总珠,不沖突。
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
    int n = 10;
    int a[n];
    int * i = malloc(sizeof(int) * 5);
    cout <<sizeof(a)/sizeof(a[0]) << endl;
    n = 20;
    cout <<sizeof(a)/sizeof(a[0]) << endl;
    return 0;
}

上述代碼沒有可變數(shù)組的問題勘纯,只有隱式變換的問題局服,可能是因為C++的現(xiàn)有標(biāo)準(zhǔn)也早已經(jīng)兼容了C99。上述代碼還涉及一個可變數(shù)組的問題驳遵,就是兩次輸出都是10淫奔,a一旦定義后,其長度是不變的了堤结,不管n是否變化唆迁。

這樣的話,總的來說竞穷,C的代碼放在C++下基本沒啥問題了唐责。作為一個喜歡用C++寫C的人來說,就無需擔(dān)心啥瘾带。鼠哥。


可變數(shù)組和可變字符串的問題

其實最初寫這篇筆記也是因為這兩個問題,總結(jié)過老是忘記看政,還是寫下來為妙朴恳。

  • 可變長度字符串

其實這個很簡單,可以有好多實現(xiàn)方式帽衙。

  1. 指針定義字符串
char *p = "Hello World";

這里得注意菜皂,p可以重新指向一個新的字符串常量,但是無法通過*p修改字符串常量的內(nèi)容厉萝。

  1. string類(我偏向于使用這個)
  2. 字符數(shù)組
#define N 10000
char str[N]={};

我們可以定義一個很大的字符數(shù)組,但是因為有‘\0’的存在榨崩,strlen()可以是變化的谴垫。注意,sizeof()的話還是N的長度母蛛。

  • 可變長度數(shù)組

數(shù)組沒辦法翩剪,一開始一定要指定長度疼燥,在C89那會纪隙,必須要用常量才能賦予長度,但是后來在C99后變量也可以賦予長度了,此外const常變量也可以賦予長度唱歧。

方法很多,動態(tài)數(shù)組還可以用new(C++)或malloc(C)實現(xiàn)蔼卡。

 int n=20;      
 int *p=new int[n];

這些所謂的動態(tài)其實一旦賦值之后數(shù)組長度就不變了嵌施,要換長度就得delete,再重新new浙巫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末金蜀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子的畴,更是在濱河造成了極大的恐慌渊抄,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丧裁,死亡現(xiàn)場離奇詭異护桦,居然都是意外死亡,警方通過查閱死者的電腦和手機煎娇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門二庵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逊桦,你說我怎么就攤上這事眨猎。” “怎么了强经?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵睡陪,是天一觀的道長。 經(jīng)常有香客問我匿情,道長兰迫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任炬称,我火速辦了婚禮汁果,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玲躯。我一直安慰自己据德,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布跷车。 她就那樣靜靜地躺著棘利,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朽缴。 梳的紋絲不亂的頭發(fā)上善玫,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音密强,去河邊找鬼茅郎。 笑死蜗元,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的系冗。 我是一名探鬼主播奕扣,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼毕谴!你這毒婦竟也來了成畦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涝开,失蹤者是張志新(化名)和其女友劉穎循帐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舀武,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡拄养,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了银舱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘪匿。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寻馏,靈堂內(nèi)的尸體忽然破棺而出棋弥,到底是詐尸還是另有隱情,我是刑警寧澤诚欠,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布顽染,位于F島的核電站,受9級特大地震影響轰绵,放射性物質(zhì)發(fā)生泄漏粉寞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一左腔、第九天 我趴在偏房一處隱蔽的房頂上張望唧垦。 院中可真熱鬧,春花似錦液样、人聲如沸振亮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽双炕。三九已至,卻和暖如春撮抓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摇锋。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工丹拯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留站超,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓乖酬,卻偏偏與公主長得像死相,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咬像,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 本文由 伯樂在線 - 艾凌風(fēng) 翻譯算撮。未經(jīng)許可,禁止轉(zhuǎn)載县昂! 英文出處: Steve Emms肮柜。歡迎加入翻譯組。 Bo...
    軟體動物Ai閱讀 2,484評論 2 47
  • C中的預(yù)編譯宏定義 2009-02-10 作者: infobillows 來源:網(wǎng)絡(luò) 在將一個C源程序轉(zhuǎn)換為可執(zhí)行...
    白水灬煮一切閱讀 1,595評論 0 5
  • 轉(zhuǎn)自http://blog.csdn.net/xugangwen/article/details/44811783...
    扎Zn了老Fe閱讀 12,729評論 1 142
  • 旅在北京倒彰,天放晴审洞,陽光明媚,藍(lán)的透亮待讳。 但風(fēng)好大芒澜,直直的風(fēng),帶著勁兒创淡,直往人的身上撲痴晦,領(lǐng)子稍微沒拉住,就鉆進了衣服...
    李星凝閱讀 245評論 0 2
  • 明天又要上班了琳彩,想到即將告別這段難得的悠閑時光誊酌,難免有些留戀和不舍。 今年暑假是我認(rèn)為迄今為止過得最好的一次汁针。前些...
    海燕_f75a閱讀 376評論 10 9