C語言深度擴充套件 2 符號的技巧(上)

2021-09-11 02:30:16 字數 2369 閱讀 1694

初探注釋規則

由程式及結果分析發現:

y=x/*p是什麼意思?

作者本意:把 x 除以 *p 的結果賦值給 y

編譯器:將 /* 作為一段注釋開始,把 /* 後的內容都當成注釋內容,直到 */ 出現為止

在編譯器看來,注釋和其它程式元素都是平等的,可以在 / 與 * 之間新增空格,所以,作為程式設計師也不能看輕注釋。

注釋注意

注釋應該準確易懂,防止二義性,錯誤的注釋有害而無利

一目了然的**避免加注釋

不要用縮寫來注釋**,這樣可能會產生誤解

注釋用於闡述原因,而不是用於描述程式的執行過程

注釋符「//」後面盡量空乙個格,再寫注釋,注釋和**段對齊,效果更好。

//高通**注釋if(

!nerr)

接續符的使用:

編譯器會將反斜槓剔除,跟在反斜槓後面的字元自動解到前一行

在接續單詞時,反斜槓之後不能有空格,反斜槓的下一行之前也不能有空格

接續符適合在定義巨集**塊時使用(definede定義的巨集必須在一行之內完成

轉義符轉義符()主要用於表示無回顯字元,也可用於表示常規字元

c 語言中的反斜槓 ( \ ) 同時具有接續符和轉義符的作用:

當反斜槓作為接續符使用時可直接出現在程式中

當反斜槓作為轉義符使用時必須出現在字元(單引號)或字串(雙引號)中

基本概念

c語言中的單引號用來表示字元字面量。

( 』a』 表示字元常量在記憶體中佔1個位元組 』a』 + 1表示 』a』 的ascii碼加1,結果為 』b』)

c語言中的雙引號用來表示字串字面量。

(」a」 表示字串常量在記憶體中佔2個位元組,」a」 + 1表示指標運算,結果指向 」a」 結束符 』\0『)

字元字面量被編譯為對應的 ascii 碼,字串字面量被編譯為對應的記憶體位址。

printf的第乙個引數被當成字串記憶體位址。

記憶體的低位址空間不能在記憶體中隨意訪問。

混淆概念的**

範例一

#include

p1, p2, p3 指標指向記憶體如下圖所示,其中 p1, p2 指向的記憶體位址很低,而在乙個作業系統裡面,低位的位址一般保留起來給作業系統用的,我們一般操作0x08048000之後的位址。printf列印指標(也就是字串),但p1, p2 指向內容不是字串,故出現段錯誤。

printf原型為printf(char* fmt ….) , printf(』\n』);表示指標fmt 指向 『\n』;(『\n』的值為10),同理出現段錯誤。

範例二

#include

intmain()

return0;

}

分析:

1. 編譯後字串" "的記憶體位址被賦值給變數 c

2. 記憶體位址占用4個位元組,而變數c只占用1個位元組

3. 由於型別不同,賦值後產生截斷

程式中的短路規則

邏輯或(||)從左向右開始計算

邏輯與(&&)從左向右開始計算:

&& 比 || 具有更高優先順序

非(!)

C語言深度解剖 符號

一 注釋符號 1 和 c語言中,編譯器會將 注釋剔除,然後用空格去代替原來的注釋。2 這種形式的注釋不能巢狀,如 這是 非法的 因為 總是與離他最近的 匹配。3 y x p 或 y x p 表示 x 除以 p指向的記憶體裡的值,把結果賦值為 y 斜槓 和星號 之間沒有空格 就會被當作注釋的開始。4 ...

c語言筆記2 符號

1.注釋符號 編譯器在編譯中將注釋符號用空格代替 編譯器認為雙引號括起來的內容是字串 型注釋不能被巢狀 編譯器將 作為一段注釋的開始,把 後的內容作為注釋,直到出現 2.接續符 盡量不用 編譯器將反斜槓刪除,後面一行的內容自動接到前一行 在連線單詞時,反斜槓後不能有空格,下一行之前不能有空格 接續符...

含糊不清的C語言符號擴充套件

下面一段 會輸出什麼呢?char c 0xff if c 0xff printf successful n else printf failed n 答案是取決於不同的編譯器設定 注 gcc可通過新增編譯引數 fsigned char funsigned char來指定編譯器如何識別char 同樣的...