C語言編程學(xué)習(xí)基礎(chǔ)知識

1,“\”引起的錯誤:

在我們現(xiàn)在的編譯器中如果寫下面這段程序

int?main()?{

//?create?file?in?c:\

ofstream?outupt("test.txt");

}

編譯就會用字符的顏色來提示我們,這兩行內(nèi)容都被當(dāng)做了注釋的內(nèi)容,但是如果在vim下編寫程序,就不會出現(xiàn)代碼顏色不一樣的問題,導(dǎo)致程序出錯,是什么原因呢,是因為"\"的問題,它在c++或者python語言中,代表的含義都是本行尚未結(jié)束,下一行仍和本行是一個整體,所以編譯器會認為,兩行都是注釋,最終導(dǎo)致錯誤。

2, 想想這個表達式: y = x/*p 他的結(jié)果是什么呢? 有可能是x的值除以*p的值的結(jié)果賦給y,但是在實際編譯中會出錯,為什么? 因為編譯器會把 /*當(dāng)成注釋的開始,之后的內(nèi)容都是注釋,但是要結(jié)束注釋需要找到匹配的*/,但是沒有找到,所以編譯會出錯。如果向改正程序的話,在/, * 之間加一個空格,或者給他們加一個(),就解決了。

3, #define PCHAR char*

PCHAR p1, p2;

typedef char* pchar;

pchar p3, p4;

那sizeof p1, p2, p3, p4都是什么呢,結(jié)果是4, 1, 4, 4,結(jié)果很奇怪吧,原因要追溯到編譯器對#define的處理,是對#define定義的東西在預(yù)編譯的時候進行替換,也就是說真正編譯的時候是這個樣子 char * p1, p2;這樣該明白p2的值是1的原因了吧。

4,enum enum_value {

VALUE_ONE,

VALUE_TWO,

VALUE_THREE,

}enum_val;

測試一下sizeof enum_val的值,看是多少,你會發(fā)現(xiàn)是4,其實這個原因很簡單,enum 定義的變量只是一個UINT類型,而它生命的VALUE_ONE,VALUE_TWO, 只是enum變量的取值范圍而已,所以enum不是像struct那樣是個結(jié)構(gòu)體,它表示的只是一個集合。

5, #define,因為在預(yù)編譯的時候就會做替換,所以他不會導(dǎo)致不必要的內(nèi)存分配。同時宏看起來像一個函數(shù),但不會招致函數(shù)調(diào)用不必要的開銷。

在定義宏的時候,必須記住為所以得實參加上小括號,但即使加上了小括號,也會遭遇麻煩:

#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))

看看下面的調(diào)用:

int a = 5, b = 10

CALL_WITH_MAX(++a, b)

CALL_WITH_MAX(++a, b + 10) 把實參替換一下就可以看到,a的遞增次數(shù)取決于它被拿來和誰比較。

6, int a[6], sizeof(a[6]) 為什么不會出錯? 因為sizeof 是一個關(guān)鍵字,關(guān)鍵字求值是在編譯的時候,雖然并不存在a[100]這個元素,但是這里并沒有真正的去訪問a[6], 而是僅僅根據(jù)數(shù)據(jù)元素的類型確定其值。 那么函數(shù)引用a[6]就會出錯,是因為函數(shù)求值是在運行的時候。

學(xué)習(xí)思路:

這些是C/C++能做的?

服務(wù)器開發(fā)工程師、人工智能、云計算工程師、信息安全(黑客反黑客)、大數(shù)據(jù) 、數(shù)據(jù)平臺、嵌入式工程師、流媒體服務(wù)器、數(shù)據(jù)控解、圖像處理、音頻視頻開發(fā)工程師、游戲服務(wù)器、分布式系統(tǒng)、游戲輔助等

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容