KEIL編程時遇到的常見錯誤

KEIL編程時遇到的常見錯誤

2014   北京海淀區  張俊浩


1.warning:  #1-D: last line of file ends without a newline 

爲什麼 C 語言源程序最後一行要是一個空行?否則的話編譯器會報warning: #1-D: last line of file ends without a newline這種錯誤,雖然這個warning沒啥影響,但既然要設計這麼一個warning總得有點原因吧。2014-11-20)

C 語言是在 Unix 中發明的,爲 Unix 系統的編程語言,它對文件的處理遵循一個基本的原則:文件是流式的,可以被任意的拼接並且拼接後仍然保證完整性。

爲了保證這一點,在 Unix 中 \n 符號被定義爲一行的『結束符』,換句話說,如果一行的結尾沒有 \n 視爲這一行沒有結束,換句話說這個文件不完整,也就是說這根本不是一個合法的文本文件。(題外話:同時爲了保證這一點,Unix 文本通常不允許使用 BOM,因爲 BOM 拼接之後將出現在字符流的中間位置,無法有效的定義其處理方法。)
在 Windows 中,微軟把 \n 定義爲兩行之間的『分隔符』而非結束符,所以 Unix 文件結尾的 \n ,在 Windows 看起來就是一個空行,而這一個空行在 Unix 中並不存在,如果你使用 Vim 之類的文本編輯器,會根本看不到最後這個空行。
不遵守標準會帶來的問題是:如果 \n 是兩行之間的分隔符,那麼最後一行不帶 \n,結果是拼接兩個文件時,後一個文件的第一行就會被拼到前一個文件的最後一行,這很可能會造成語意錯誤。
比較常見的例子是:前一個文件最後一行是 } 後一個文件第一行是 #include,如果 } 後面沒有結束符,拼接之後就成了 }#include ,立即發生語法錯誤。


發佈了54 篇原創文章 · 獲贊 56 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章