C++編程語言真的這么適用嗎?
其實C#的語法與C++非常相似,有些變化引起的錯誤卻很嚴重,本文就對于大多數(shù)用戶頭疼的C++編程語言進行詳細的剖析與介紹,然而最近幾年,C++環(huán)境的狀況真的改善了嗎?
C++編程語言的詞法及詞法規(guī)則
1、C++編程語言的字符集
字符是一些可以區(qū)分的最小符號。C++的字符集由大小寫英文字母(a-z和A-Z)、數(shù)據(jù)字符(0-9)、特殊字符(空格,!,#,%,^,&,*,_,<,>,?,\,,)組成。
2、單詞及詞法規(guī)則
單詞又稱詞法記號,它是由若干個字符組成的具有一定意義的最小詞法單元。C++共有6種單詞,分別是:標(biāo)識符、關(guān)鍵字、運算符、分隔符、常量、注釋符,在編碼時要特別注意這些單詞的詞法規(guī)則。
要注意的是C++中的空白符:C++編程語言中經(jīng)常使用空白符,實際上,空白符不是一個字符,它是空格符、換行符和水平制表符的統(tǒng)稱。注意,空白符不等于空格符,只是空白符包含空格符。
還有一個空字符,要把它與空白符分開??兆址侵窤SCII碼值為0的那個字符??兆址?FONT>C++中有特殊用途,用它來作為字符串的結(jié)束符。存放在內(nèi)存中的字符串常量都在最后有一個結(jié)束符,即用空字符,它用轉(zhuǎn)義序列方法表示為’\0’。
C++程序結(jié)構(gòu)的基本組成部分
1 預(yù)處理命令,C++提供了三類預(yù)處理命令:宏定義命令、文件包含命令、條件編譯命令。
2 輸入輸出,C++程序中總是少不了輸入和輸出的語句,實現(xiàn)與程序內(nèi)部的信息交流。特別是屏幕輸出的功能,幾乎每個程序都要用到,使用它把計算機的結(jié)果顯示在屏幕上。
3 函數(shù),C++的程序是由若干個文件組成的,每個文件又是由若干個函數(shù)組成,因此,可以認為C++的程序就是函數(shù)串,即由若干個函數(shù)組成,函數(shù)與函數(shù)之間是相對的,并且是并行的,函數(shù)之間可以調(diào)用。在組成一個程序的若干個函中,必須有一個main()。
4 語句,語句是組成程序的基本單元。函數(shù)是由若干條語句組成的。但是,空函數(shù)是沒有語句的。語句是由單詞組成,單詞間用空格符分隔,C++程序中的語句又是以以分號結(jié)束。語句除了有表達式語句和空語句之外,還有復(fù)合語句、分支語句、循環(huán)語句和轉(zhuǎn)向語句等若干類。
5 變量,多數(shù)程序都需要說明和使用變量。廣義講,對象包含了變量,即將變量也稱為一種對象,狹義講,將對象看作是類的實例,對象是指某個類的對象。
6 其他,除了以上講述的5個部分以外,還有其他組成部分。例如,符號常量和注釋信息也是程序的一部分。C++中都盡量把常量定義為符號常量,在C++的程序中出現(xiàn)的是符號常量,該符號常量代表著某個確定的常量值。#t#
C++程序的書寫格式
在編程時應(yīng)該注意C++編程語言的書寫格式,基本原則是:一行一般寫一條語句。短語句可以一行寫多個。長語句可以一條寫多行。分行原則是不能將一個單詞分開。用雙引號引用的一個字符串也最好不分開,如果一定要分開,有的編譯系統(tǒng)要求在行尾加續(xù)行符(“\”)
C++程序的實現(xiàn)
C++源程序的實現(xiàn)與其他高級語言源程序?qū)崿F(xiàn)的原理是一樣的。一般都要經(jīng)過編輯、編譯、運行。其中最要的是編譯過程,C++是以編譯方式實現(xiàn)的高級語言。C++程序的實現(xiàn),必須要使用某種C++編程語言的編譯器對程序進行編譯。
編譯器的功能是將程序的源代碼轉(zhuǎn)換成為機器代碼的形式,稱為目標(biāo)代碼;然后,再使目標(biāo)代碼進行連接,生成可執(zhí)行文件。該過程可分為三個子過程:預(yù)處理過程、編譯過程(詞法分析、語法分析、符號表、錯誤處理程序、生成目標(biāo)代碼)、連接過程。
首先重復(fù)一句Bjarne的話:“我們的系統(tǒng)已經(jīng)是極度復(fù)雜的了,為了避開C++的復(fù)雜性而干脆不用C++(Linus的做法),無異于因噎廢食?!痹谒锌捎肅和C++的領(lǐng)域,C++都是比C更好的語言。當(dāng)我說“更好的”時候,我說的是C++編程語言擁有比C更安全的類型檢查、更好的抽象機制、更優(yōu)秀的庫。
當(dāng)然,凡事都有例外,如果你做的項目1)不大。2)編碼中用不到什么抽象機制,甚至ADT(抽象數(shù)據(jù)類型,例如std::complex這種不含多態(tài)和繼承的)也用不到,RAII也用不到,異常也用不到。3)你連基礎(chǔ)庫(如,簡化資源管理的智能指針、智能容器)都用不著。
那么也許你用C的確沒問題;所以如果你的情況如此,不用和我爭論,因為我無法反駁你。我們這里說的領(lǐng)域大致是Bjarne在“C++應(yīng)用列表”里面列出來的那些地方。 底線是:如果把C++中的諸多不必要的復(fù)雜性去掉,留下那些本質(zhì)的,重要的語言特性,簡化語言模型,消除歷史包袱。
即便是C++的反對者也許也很難找到理由說“我還是不用C++”。在我看來,一個真正從實踐意義上理性反對使用C++的人只有一個理由:C++的復(fù)雜性帶來的混亂抵消乃至超過了C++的抽象機制和庫(在他的特定項目中)帶來的好處。