C 語言的四個準則

2021-10-24 14:44:26 字數 2010 閱讀 1852

一、最高準則:無二義性

1.對這個準則的理解:同一條c++語句不能同時具備兩種或多種含義,每一條c++語句只能通過一種方式執行,得到唯一結果。

二義性問題

1.在繼承時,基類之間或基類與派生類之間發生成員同名時,將出現對成員訪問的不確定性——同名二義性。

例子:

2.當派生類從多個基類派生,而這些基類又從同乙個基類派生,則在訪問此共同基類中的成員時,將產生另一種不確定性——路徑二義性。

例子:

2.準則的具體體現 :

1)運算子的優先順序與結合性。

優先順序:先乘除後加減、有括號先算括號內的。 結合性:若乙個運算物件兩側的運算子優先順序相同,按規定的結合方向:算術運算子——自左向右,賦值運算子——自右向左。

2)識別符號不能以數字開頭

為了讓識別符號只能是識別符號,例如:假若沒有這條規則,那麼「246」是識別符號還是常量?就不好區分了,這條規則的制定很好地消除了此類二義性。

3)貪心規則

每乙個符號應該包含盡可能多的字元。也就是說,編譯器將程式分解成符號的方法是,從左到右乙個乙個字元地讀入,如果字條可能組成乙個符號,那麼再讀入下乙個字元,判斷已經讀入的兩個字元組成的字串是否可能是乙個符號的組成部分,如果可能,繼續讀入下乙個字條,重複上述判斷,直到讀入的字元組成的字串已經不再可能組成乙個有意義的符號。這個處理的策略被稱為「貪心法」。需要注意的是,除了字串與字元常量,符號的中間不能嵌有空白(空格、製表符、換行符等)。這種策略得到的是最優解,故而可以消除其他解的二義性。

二、次高準則:高效性

對這個準則的理解:c++程式語言出現時,計算機效能普遍較低,所以計算機效能是個重要的制約因素,也是主要矛盾,隨著計算機逐漸發展,效能逐漸提高,高效性就不再是很多語言的次高準則了。如果有兩個行為a與b,均滿足無二義的規則,且a比b高效,則c++語言會選擇a行為作為標準語法。

(1)陣列下標0索引

陣列下標0索引是為了提高計算時的效率,由不同語言有不同的命名方式:

0索引:&a[i] = &a[0] + i * sizeof(a[0])

1索引:&a[i] = &a[0] + (i-1) * sizeof(a[0])

顯然以0索引的方式可以更高效地計算.

(2)邏輯短路問題

&& 運算,當前面為0時,後面則不進行計算,發生短路

|| 運算,當前面為1時,後面則不進行計算,發生短路

三、合乎日常習慣

理解:就是讓c++程式語言對程式設計師來說用的順手,符合日常用語習慣。

1)運算的優先順序

在數學中,乘法的優先順序高於加法,先計算乘法再計算加法,在c++中也是如此,符合日常習慣,給編寫帶來了極大方便。

二維陣列下標表示總行數和總列數。

例如a[3][4]用下標3和4表示乙個3行4列的矩陣,合乎日常習慣

準則的具體體現:

(1)語句的命名:迴圈語句、結構體等等採用英語單詞,便於理解。

例如:while、do·····while

(2)運算時的優先順序:先乘除後加減、有括號的先算括號裡的等等。

四、補充規則:相似相同規則

對這個規則的理解:如果有兩個不同的物件具有相似的行為,那麼c++會為這兩個物件額外增加對方的行為,使得這兩個不同物件具有對方的相同行為。有利於程式的簡化。

準則的具體體現: c++變數的初始化: 傳統初始化:

等號初始化:使用同型別的常量來初始化 int k = 5; int k = i;

括號初始化:c++特有的初始化形式 int k(5); int k(i); 變數與物件之間的「相似相同規則」 c++11標準:

列表初始化: int j; int j;int j=; int j=;變數與陣列之間的「相似相同規則」

括號初始化是變數與物件之間的「相似相同規則」;列表初始化是變數與陣列之間的「相似相同規則」。本質上是c++將變數、物件及陣列統一對待的原則的產物

C 程式語言的四個基本準則

二 次高準則 高效性 三 第三準則 合乎日常習慣 四 補充準則 相似相同規則 五 結語 對這個準則的理解 程式語言於計算機而言,通俗地說就是指令,若乙個指令出現歧義,計算機則會無法判斷該執行哪一種。倘若執行了其中一種,則可能與本來所需要的結果相悖,不符合實際需求。所以,程式語言的無二義性,可以使得我...

C 程式語言的四個基本準則

對這個準則的理解 這個準則,不僅是c 的準則,更是所有型別程式語言的最高準則。同一條c 語句不能同時具備兩種或多種含義,每一條c 語句只能通過一種方式執行,得到唯一結果。準則的具體體現 1 運算子的優先順序與結合性。優先順序是為了消除如5 6 7的表示式,是應該被當作 5 6 7還是5 6 7 的二...

C 程式語言的四個基本準則

理解 同一條語句不能具有兩種及以上的含義,否則將導致語句的執行過程發生衝突。體現 1 運算子的優先順序與結合性 運算子優先順序的產生,是為了消除運算過程中可能產生的歧義。例如加法和乘法兩種運算到底誰先進行。int a 1 2 3 乘法優先於加法進行運算,輸出7,而不是9 2 識別符號不能以數字開頭 ...