關於程式的討論裡提到了c語言的可移植,原本不知道為什麼,現在知道,原來是因為各種平台上都有c語言的編譯器,這就好像是一種由於廣泛使用而成為規範的東西一樣,當所有機器上都有你的編譯器的時候,你的可移植性當然強了。
之前看v6shell的**就沒明白詞法和語法有什麼差別,這裡講到了詞法就是單詞(token)的規則,而語法是單詞和結構的規則。而形式語言,這裡的程式語言c語言是理所當然的形式語言,所以沒有自然語言的那麼多歧義,而是看字面意思。
程式裡的錯誤分成:1編譯時錯誤,一般是編譯器發現的語法錯誤;2執行時錯誤,編譯通過,但是實際執行時出錯甚至程式崩潰;3邏輯錯誤和語義錯誤,也就是你想讓程式完成的任務編寫的**雖然能夠執行,但結果不是你想要的這類錯誤,需要頭腦清晰的分析出錯的地方。
例如printf(1);語句會產生警告資訊,但編譯還是能通過,在執行時會有segmentation fault錯誤,所以是執行時錯誤。有時編譯器不提示一些不是很嚴重的警告,比如printf(0);當想看到這類警告時要用gcc -wall選項。
由雙引號(double quote)引起來的一串字元稱為字串字面值(string literal)。
表 2.1. c標準規定的轉義字元/'
單引號'(single quote或apostrophe)
/"雙引號"
/?問號?(question mark)
//反斜線/(backslash)
/a響鈴(alert或bell)
/b退格(backspace)
/f分頁符(form feed)
/n換行(line feed)
/r回車(carriage return)
/t水平製表符(horizontal tab)
/v垂直製表符(vertical tab)
Linux C程式設計一站式學習 筆記
1變數宣告與函式宣告有一點不同,函式宣告的extern關鍵字可以省略,而變數宣告不寫extern意思完全不同,表示為定義了乙個區域性變數。2static關鍵字宣告具有internal linkage,這些函式變數作用域僅限本檔案,則不想被外部檔案所訪問的變數和函式就可以宣告為static。3用角括號...
Linux C程式設計一站式學習
北京亞嵌教育研究中心 ps ef grep sctp grep全稱是global regular expression print,表示全域性正規表示式.gdb除錯又看一遍。迅速用起 pthread cond timedwait 條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個...
LinuxC程式設計一站式學習 堆疊
本科學習資料結構時實踐比較少,因此最近開始複習,看到 既可以打基礎,又可以順便學習linux的知識。原始 include define max row 5 define max col 5 struct point stack 512 int top 0 int maze 5 5 void push...