在一个作用域中定义同一函数两次会导致函数重定义的问题。
动手写7.4.1
动手写7.4.1展示了函数重定义的问题,编译器会报出如图7.4.1所示的错误:
图7.4.1 函数重定义
编译器报错是因为函数在这种情况下有两个定义的名字,参数与返回值类型都一样,编译器无法得知这样的函数在被调用的时候应该采用哪个函数体。不过如果定义在不同作用域中,外层的定义就会被屏蔽,也就不存在重定义的情况了。
函数声明就不会有这样的问题。与变量声明一样,函数的声明也可以与定义分离。一个文件中只要存在函数声明,编译器就知道在这个文件中的这个函数是可用的,然后在链接的时候会再去找其他文件中有没有这样的函数。
动手写7.4.2(www.xing528.com)
动手写7.4.2中的函数重复声明了,但程序可以正常运行。我们可以看到,函数声明与函数定义的区别就是没有函数体,并且也能省略形参的名字。但是为了程序的可读性,我们在设计时还是会加上形参的名字。
函数可以定义在另一个文件中:
动手写7.4.3
在动手写7.4.3中我们用3个文件展示了函数定义和声明的分离。main()函数所在文件包含了7.4.3.h,所以max()的声明在main()函数中是可见的;而在链接的时候编译器会在7.4.3.cpp中找到函数的定义。感兴趣的读者可以尝试把函数定义注释掉,那样编译器就会因为找不到函数定义而报出如图7.4.2所示的错误:
图7.4.2 找不到函数定义
虽然在7.4.3.cpp中也包含了7.4.3.h,但在这里我们只是遵循了习惯,并没有实际地用到7.4.3.h中的东西。当然,有时我们可能会在头文件中定义一些辅助变量或常量,那么在这种情况下就会用到了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。