C--《C和指针》第七章读书笔记

1、函数原型(这段太文绉绉了,看看即可)

     原型总结了函数定义的起始部分的声明,向编译器提供有关该函数应该如何调用的完整信息。使用原型最方便最安全的方法是把原型置于一个单独的文件,当其它源文件需要这个函数的原型时,就用#include指令包含该文件。这个技巧避免了错误键入函数原型的可能性,它同时简化了程序的维护任务,因为这样只需要该原型的一份物理拷贝。如果原型需要修改,你只需要修改它的一处拷贝。

     原型告诉编译器函数的参数数量和每个参数的类型以及返回值的类型,编译器见过原型后,就可以检查该函数的调用。

     关于头文件的使用,书上讲了几点好处:

         A、现在函数原型具有文件作用域,所以原型的一份拷贝可以作用于整个源文件,较之在该函数每次调用前单独书写一份函数原型要容易的多;

         B、现在函数原型只书写一次,这样就不会出现多份原型的拷贝之间的不匹配现象;

         C、如果函数的定义进行了修改,我们只需要修改原型,并重新编译所有包含了该源文件即可;

         D、如果函数的原型同时也被#Include指令包含到定义函数的文件中,编译器可以确认函数原型与函数定义的匹配。

2、关于函数原型的一个“深坑”

         当程序调用一个无法见到原型的函数时,编译器便认为该函数返回一个整型值。对于对于那些并不返回整型值的函数,这种认定可能会引起错误。

         所有的函数都应该具有原型,尤其是那些返回值不是整形的函数。值的类型并不是值的内在本质,而是取决于使用他们的方式。如果编译器认定函数返回一个整型值,它将产生整数指令操作这个值。如果这个值实际上是非整型值,比如浮点数,其结果通常是不正确的。


这一章内容不多,其中递归的知识看起来没什么新意,递归可能导致的栈溢出什么的我也都知道,所以就不总结了

猜你喜欢

转载自blog.csdn.net/fxltsbl007/article/details/80605678