C語言拾遺

2022-07-18 00:21:12 字數 1061 閱讀 4160

1  標頭檔案裡不要放全域性變數,被多次包含時,生成.o檔案連線時會衝突

2  函式體裡變數宣告都要放到前面

3  編譯錯誤:error: two or more data types in declaration specifiers

一般都是少了分號,檢查你的**

4  引用庫函式時,有函式宣告,使用也沒錯,但編譯不過,出現比如如下錯誤:

undefined reference to `inet_addr@4′    是由於沒有設定對應的鏈結庫所致

5  **知乎

為什麼 c 語言源程式最後一行要是乙個空行?

否則的話編譯器會報warning: #1-d: last line of file ends without a newline這種錯誤,雖然這個warning沒啥影響,但既然要設計這麼乙個warning總得有點原因吧。

c 語言是在 unix 中發明的,為 unix 系統的程式語言,它對檔案的處理遵循乙個基本的原則:

檔案是流式的,可以被任意的拼接並且拼接後仍然保證完整性。

為了保證這一點,在 unix 中 \n 符號被定義為一行的『結束符』,換句話說,如果一行的結尾沒有 \n 視為這一行沒有結束,換句話說這個檔案不完整,也就是說這根本不是乙個合法的文字檔案。

(題外話:同時為了保證這一點,unix 文字通常不允許使用 bom,因為 bom 拼接之後將出現在字元流的中間位置,無法有效的定義其處理方法。)

在 windows 中,微軟把 \n 定義為兩行之間的『分隔符』而非結束符,所以 unix 檔案結尾的 \n ,在 windows 看起來就是乙個空行,而這乙個空行在 unix 中並不存在,如果你使用 vim 之類的文字編輯器,會根本看不到最後這個空行。

不遵守標準會帶來的問題是:如果 \n 是兩行之間的分隔符,那麼最後一行不帶 \n,結果是拼接兩個檔案時,後乙個檔案的第一行就會被拼到前乙個檔案的最後一行,這很可能會造成語意錯誤。

比較常見的例子是:

前乙個檔案最後一行是 } 後乙個檔案第一行是 #include,如果 } 後面沒有結束符,拼接之後就成了 }#include ,立即發生語法錯誤。

C語言拾遺

main函式引數 c語言規定main函式引數只能有兩個,習慣上這兩個引數寫成argc和argv。c語言還規定argc必須是整形變數,argv必須是指向字串的指標陣列。因此,main函式的函式頭應該寫為 main argc,argv int argc char argv 或者 main int arg...

C語言拾遺

保證某些全域性變數的常量性 c c 中不能通過變數來定義陣列 const int row 10 const int col 10 c define row 10 define col 10orenum c style型別轉換 new type expression static cast expre...

C語言拾遺

1.操作符與基本型別 賦值運算子的優先順序低於算數運算子。如 x 3 2即x 3 2 優先順序 高於 高於 高於 一元操作符的關聯是從右到左,和 都必須邦定乙個變數或者叫 左值 如 x 注意 x 並不是左值。例如 z x y,相當於 z x y 字元 0 對應ascii的48,a 對應的是65。無論...