C語言中的語法錯誤和語義錯誤
語法錯誤
1:如果不遵循C語言的規則就會犯語法錯誤,它類似於英語中的語法錯誤。
例如(Bugs frustrate be can)這句英語
可以看出句子中的英語單詞都是正確的,但是沒有按照正確的順序組織句子。c的語法錯誤就是指正確的c符號放在了錯誤的位置。
那麼如何檢測程式的語法錯誤呢?
首先,在編譯前瀏覽程式的原始碼看看是否有明顯的錯誤。
其次,可以檢視編譯器發現的錯誤(這裡編譯器的工作之一就是檢查語法錯誤)
語義錯誤
1:語義錯誤就是在意思上的錯誤
例如 (Furry inflation thinks greenly)
句子中的形容詞,名詞,動詞和副詞的位置都很正確,所以語法沒有錯誤,但是句子卻什麼意思也沒有表達出來。在c中,當您正確遵循了C語言的規則,但是結果不正確的時候,那就是犯了語義錯誤。
並且語義錯誤編譯器是檢測不到的,因為它並沒有違反C語言的規則,此時只能自己去找出這類錯誤
方法之一就是比較程式實際得到的結果和你預期的結果。
相關推薦
C語言中的語法錯誤和語義錯誤
語法錯誤 1:如果不遵循C語言的規則就會犯語法錯誤,它類似於英語中的語法錯誤。 例如(Bugs frustrate be can)這句英語 可以看出句子中的英語單詞都是正確的,但是沒有按照正確的順序組織句子。c的語法錯誤就是指正確的c符號放在了錯誤的位置。 那麼如何
C語言中的一個*和[]優先級問題
pre 執行 return ges spa 技術 分享 malloc bsp 最近寫著玩了這麽一段代碼 1 int Init(int **T, int v1, int v2, int v3) 2 { 3 4 if (!(*T=(int*) malloc(3*
c語言中宏定義和常量定義的區別
沒有 int 符號表 cnblogs 格式 nbsp 參數 不同之處 區別 他們有共同的好處就是“一改全改,避免輸入錯誤”哪兩者有不同之處嗎?有的。 主要區別就在於,宏定義是在編譯之前進行的,而const是在編譯階段處理的 宏定義不占用內存單元而const定義的常量
對c語言中指標陣列和陣列指標的認識
1.陣列:一批具有同名的同屬性的資料就組成了一個數組。(“[ ]”也是陣列型別的一部分) 由此可知:(1)陣列是一組有序資料的集合;(2)陣列中的每一個元素都屬於同一個資料型別。 定義一維陣列的一般形式:型別符 陣列名【常量表達式】(陣列也
C語言中巨集定義和函式的取捨
原文連結:http://www.embedu.org/Column/Column177.htm 要寫好C語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既可以寫成函式,也可以
c語言中的 strcpy和strncpy字串函式使用介紹
1.strcpy函式 函式原型:char *strcpy(char *dst,char const *src) 必須保證dst字元的空間足以儲存src字元,否則多餘的字元仍然被複制,覆蓋原先儲存在陣列後面的記憶體空間的數值,strcpy無法判斷這個問題因為他無法判斷字元陣列的長度。
詳解:C語言中的指標和p, p+1, *(p+1), *P+1, p[0], &p[0] 的含義
解析:C語言中的指標和p, p+1, *(p+1), *P+1, p[0], &p[0] 每一種表示式的含義 一、先解決一個問題:什麼是指標 指標就是存放地址的變數。很好,百度上就是這個答案(哈哈,感覺這句話很廢話)。 指標是一個大小固定為4個byte的變數,不管
詳解C語言中的 %*s 和 %.*s
%*s:取決於在scanf中使用還是在printf中使用。 1.在scanf中使用,則添加了*的部分會被忽略,不會被引數獲取。 例如: int a,b; char b[10]; scanf("%d%*s",&a,b); //輸入為:12 abc那麼12將會讀取到變數a
c語言中的__FILE__和__LINE__的作用
這是編譯器內建巨集,這些巨集定義不僅可以幫助我們完成跨平臺的原始碼編寫,靈活使用也可以巧妙地幫我們輸出非常有用的除錯資訊。 例如:printf("FILE: %d, LINE: %d, %s/n", "__FILE__, __LINE__, "這裡寫上相關資訊"); ANS
C語言中區域性變數和全域性變數變數的儲存類別(static,extern,auto,register)
C語言中區域性變數和全域性變數變數的儲存類別(static,extern,auto,register) 1----區域性變數和全域性變數 在討論函式的形參變數時曾經提到,形參變數只在被呼叫期間才分配記憶體單元,呼叫結束立即釋放。這一點表明形參變數只有在函式內才是有效的,離開該函式就不能再使用了。
關於C語言中自增和自減運算子的使用及注意事項
++是自增運算子,是單目運算子,其作用是使單個變數的值增1。它有兩種使用情況: 1)前置:++i,先執行i=i+1,再使用i值; 2)後置:i++,先使用i值,再執行i=i+1。 例如: j=3;k=++j; 執行“k=++j”語句後,k=4,j=4。上述語句等效為: j=
C語言中對時間和日期的處理
北京燕園智峰韓語培訓中心 韓語:依附於漢城(首爾)著名大學--漢城(首爾)大學的授課內容,短期內使學員快速掌握韓語培訓的聽、說、讀寫能力。教員由漢城(首爾)著名大學--延世大學的講師和漢城(首爾)專業培訓的歸國老師共同打造韓語課程。本班質量可靠、學費低廉,是大學生選擇學韓語的首佳之選。培訓機構自從開辦六年以
c語言中形參和實參的區別?
形式引數和實際引數 函式的引數分為形參和實參兩種。在本小節中,進一步介紹形參、實參的特點和兩者的關係。形參出現在函式定義中,在整個函式體內都可以使用,離開該函式則不能使用。實參出現在主調函式中,進入被調函式後,實參變數也不能使用。形參和實參的功能是作資料傳送。發生函式呼叫
C語言中的字串和字元陣列
本文來源於網路,轉載為是了更好的複習! 原文網址 :點這裡 1、字元陣列的定義與初始化 字元陣列的初始化,最容易理解的方式就是逐個字元賦給陣列中各元素。 char str[10]={ 'I',' ','a','m',' ',‘h','a','p','p','y'}; 即把1
C語言中單引號和雙引號的區別
拿0來舉例: 單引號是單個字元‘0’; 雙引號是字串“0”,包含0和結束符 , 即‘0’‘\0’ 組成的有一個字元0和結束符組成的字串。 雙引號裡面的是字串,代表的卻是一個指向無名陣列起始字元的指標,該陣列被雙引號之間的字元以及一個額外的二進位制值為零的字元‘\0’初始化
C語言中關於除法和取餘的理解
C語言除法運算子“/”和求餘運算子“%” 看似兩個很簡單的運算子,卻也真要掌握用好它也不容易,本文作為關於此類運算子的各方面的問題的彙總,希望對你我都有一些幫助。 除法運算子“/”。二元運算子,具有左結合性。參與運算的量均為整型時,結果為整型,捨去小數。如果運算量中有一個為實型,結果為雙精度實型
C語言中字元陣列和字串指標分析
這幾天搞Unix上的C程式,裡面用到了很多字元陣列和字串指標,我記得在學完C語言後相當一段時間裡,對指標這個東西還是模模糊糊,後來工作也沒怎麼用到過C,雖然網上這類的文章也有很多,還是決定自己在這做個小總結,也算加深下自己的印象,寫了下面的測試程式: #include <stdio.h>
c語言中逗號運算子和逗號表示式
C語言提供一種特殊的運算子——逗號運算子。用它將兩個表示式連線起來。如: 3+5,6+8 稱為逗號表示式,又稱為“順序求值運算子”。逗號表示式的一般形式為 表示式1,表示式2 逗號表示式的求解過程是:先求解表示式1,再求解表示式2。整個逗號表
C語言中的++a和a++的區別
自增自減1、++自增運算子:如a++,++a都等價於a = a + 1;2、--自減運算子:如a--,--a都等價於 a = a -1; 雖然++a和a++等價的結果一樣,但是運算過程確大不相同,以下舉例說明: #include <stdio.h> int
C語言中區域性變數和全域性變數解釋
區域性變數 : 在一個函式內部定義的變數是區域性變數,它只在本函式範圍內有效,也就是說只有在本函式內才能使 用它,在此函式外是不能使用這些變數的。這些稱為區域性變數。 說明 (1) 不同函式中可以使用相同名字的變數,它們代表不同的變數,互不干擾。