//小寫字母轉換為大寫
//參數: c 待轉換的字符
//返回值: 轉換后的字符,如果原字符不是小寫字母,則為原字符
char ToUpper(char c)
{
int ca = 'A' - 'a'; //大寫字母和小寫字母之間差距多少?
if(c >= 'a' && c <= 'z')
c += ca;
return c;
}
至此,所有自定義函數都已完成定義(實現),而三個文件的主要內容也以確定。讓我們看看示意圖:
main.cpp中的main()函數調用了三個函數。回憶我們學習過的“如何調用函數”的知識,當前代碼在調用一個函數時,必須能“看到”這個函數。盡管CalcTotal()、CalcAverage()、ToUpper()三個函數所在文件都在同一工程里,但是在main.cpp里的代碼,還是看不到它們。想一想我們以前說的“請修理工”的比喻。現在情況是:在你所住的小區,甚至就是同一樓道里,就有一個電視修理工,但可惜你們互不認識,所以當你電視壞了,想“調用”一個修理工時,你還是找不到修理工。哎!要是有它的名片就好了。
讓我們試試看,按Ctrl + F9,編輯該工程。出錯!
正好是三個錯。分別告訴我們調用了三個沒有定義的函數(Call to undefined function ...)。
現在我們得到一個印象:當我們定義了一個函數或變量之后,似乎所有的源代碼文件中都可以使用它,只要你在使用之前寫一下相應的聲明。
這樣會不會帶來麻煩了?想象一下,你在A文件定義了一個變量: int i, 那么以后你在別的文件里就不能再定義這個變量了!原因前面已經說過,編譯器(或鏈接器)會說有兩個變量重名。函數也一樣,盡管它有重載機制,便那也只能是有限制地允許函數重名。
事實上,上例中的 int age 是一個全局變量。關于“全局”的解釋,需要引起C,C++程序的另一話題:作用范圍。這是下一章的內容。在那一章里,我們將看到,大部分變量只在它一定的作用范圍內“生存”,不同的作用范圍的變量就可以毫無障礙地重名了。
休息休息(該點眼藥水了···),然后學習本章附加一節。