//小写字母转换为大写
//参数: 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++程序的另一话题:作用范围。这是下一章的内容。在那一章里,我们将看到,大部分变量只在它一定的作用范围内“生存”,不同的作用范围的变量就可以毫无障碍地重名了。
休息休息(该点眼药水了···),然后学习本章附加一节。