home *** CD-ROM | disk | FTP | other *** search
/ Collection of Education / collectionofeducationcarat1997.iso / COMPUSCI / CPPTUT.ZIP / CHAP04.TXT < prev    next >
Text File  |  1990-07-20  |  22KB  |  473 lines

  1.  
  2.  
  3.  
  4.                                                         Chapter 4
  5.                                                         FUNCTIONS
  6.  
  7. This chapter discusses the changes in the use of functions that
  8. have been made to C++ in order to make programming more convenient
  9. and to let the compiler do further checking for errors.  A fair
  10. amount of time is also spent on teaching the modern form of
  11. function definition and prototyping.
  12.  
  13. Prototyping allows the compiler to do additional type checking for
  14. your function calls which can aid in detecting programming errors. 
  15. The first two example programs in this chapter are designed to
  16. teach prototyping and what it will do for you.  Prototyping is a
  17. relatively new addition to C, so even some experienced C
  18. programmers are not familiar with it.  If you have experience with
  19. prototyping you can skip directly to the section named INLINE CODE
  20. on page 4-4 of this chapter.
  21.  
  22.  
  23. PROTOTYPES
  24. _________________________________________________________________
  25.  
  26. Examine the file named PROTYPE1.CPP for our      ================
  27. first look at a prototype and an illustration of   PROTYPE1.CPP
  28. how it is used.  The prototyping used in C++ is  ================
  29. no different than that used in ANSI-C. 
  30. Actually, many C programmers take a rather dim
  31. view of prototyping and seem reluctant to use it, but with C++ it
  32. is considerably more important and is in much heavier use.  In
  33. fact, prototyping is required to be used in C++.
  34.  
  35. A prototype is a limited model of a more complete entity to come
  36. later.  In this case, the full function is the complete entity to
  37. come later and the prototype is illustrated in line 4.  The
  38. prototype gives a model of the interface to the function that can
  39. be used to check the calls to the function for the proper number
  40. of parameters and the correct types of parameters.  Each call to
  41. the function named do_stuff() must have exactly three parameters
  42. or the compiler will give an error message.  In addition to the
  43. correct number of parameters, the types must be compatible or the
  44. compiler will issue an error message.  Notice that when the
  45. compiler is working on lines 12 and 13, the type checking can be
  46. done based on the prototype in line 4 even though the function
  47. itself is not yet defined.  If the prototype is not given, the
  48. number of parameters will not be checked, nor will the types of the
  49. parameters be checked.  You will get an apparently good compile and
  50. link, but the program may do some very strange things when it is
  51. executed if the correct number of parameters are not used.
  52.  
  53. To write the prototype, simply copy the header from the function
  54. to the beginning of the program and append a semicolon to the end
  55. as a signal to the compiler that this is not a function but a
  56. prototype.  The variable names given in the prototype are optional
  57.  
  58.                                                          Page 4-1
  59.  
  60.                                             Chapter 4 - Functions
  61.  
  62. and act merely as comments to the program reader since they are
  63. completely ignored by the compiler.  You could replace the variable
  64. name wings in line 4 with your first name and there would be no
  65. difference in compilation.  Of course, the next person that had to
  66. read your program would be somewhat baffled with your choice of
  67. names.
  68.  
  69. In this case, the two function calls to this function, given in
  70. lines 12 and 13, are correct so no error will be listed during
  71. compilation.
  72.  
  73. Even though we wish to use the char type for eyes in the function,
  74. we wish to use it as a number rather than as a character.  The cast
  75. to int in line 20 is required to force the printout of the
  76. numerical value rather than an ASCII character.  The next example
  77. program is similar but without the cast to int.
  78.  
  79.  
  80. COMPATIBLE TYPES
  81. _________________________________________________________________
  82.  
  83. We mentioned compatible types earlier so we should review them just
  84. a bit in order to make our discussion of prototyping complete. 
  85. Compatible types are any simple types that can be converted from
  86. one to another in a meaningful way.  For example, if you used an
  87. integer as the actual parameter and the function was expecting a
  88. float type as the formal parameter, the system would do the
  89. conversion automatically, without mentioning it to you.  This is
  90. also true of a float changing to a char, or a char changing to an
  91. int.  There are definite conversion rules which would be followed. 
  92. These rules are given in great detail in section 3.2 of the draft
  93. of the ANSI-C standard and are also given on page 198 of the second
  94. edition of the K&R reference.
  95.  
  96. If we supplied a pointer to an integer as the actual parameter and
  97. expected an integer as the formal parameter in the function, the
  98. conversion would not be made because they are two entirely
  99. different kinds of values.  Likewise, a structure would not be
  100. converted automatically to a long float, an array, or even to a
  101. different kind of structure, they are all incompatible and cannot
  102. be converted in any meaningful manner.  The entire issue of type
  103. compatibility as discussed in chapter 2 of this tutorial applies
  104. equally well to the compatibility of types when calling a function. 
  105. Likewise, the type specified as the return type, in this case void,
  106. must be compatible with the expected return type in the calling
  107. statement, or the compiler will issue a warning.
  108.  
  109.  
  110. HOW DOES PROTOTYPING WORK?
  111. _________________________________________________________________
  112.  
  113. This is your chance to try prototyping for yourself and see how
  114. well it works and what kinds of error messages you get when you do
  115. certain wrong things.  Change the actual parameters in line 12 to
  116.  
  117.                                                          Page 4-2
  118.  
  119.                                             Chapter 4 - Functions
  120.  
  121. read (12.2, 13, 12345) and see what the compiler says about that
  122. change.  It will probably say nothing because they are all type
  123. compatible.  If you change it to read (12.0, 13), it will issue a
  124. warning or error because there are not enough arguments given. 
  125. Likewise you should receive an error message if you change one of
  126. the parameters in line 13 to an address by putting an ampersand in
  127. front of one of the variable names.  Finally, change the first word
  128. in line 4 from void to int and see what kind of error message is
  129. given.  You will first be required to make the function header in
  130. line 16 agree with the prototype, then you will find that there is
  131. not a variable returned from the function.  Finally, you will find
  132. that there is a returned value that is not used in the calling
  133. program.  You should have a good feeling that prototyping is doing
  134. something good for you after making all of those changes.
  135.  
  136. Be sure to compile and execute this program then make the changes
  137. recommended above, attempting to compile it after each change.
  138.  
  139.  
  140. A LITTLE MORE PROTOTYPING
  141. _________________________________________________________________
  142.  
  143. Examine the next example program named           ================
  144. PROTYPE2.CPP for a little more information on      PROTYPE2.CPP
  145. prototyping.  This program is identical to the   ================
  146. last one except for a few small changes.  The
  147. variable names have been omitted from the
  148. prototype in line 4 merely as an illustration that they are
  149. interpreted as comments by the C++ compiler.  The function header
  150. is formatted differently to allow for a comment alongside each of
  151. the actual parameters.  This should make the function header a
  152. little more self explanatory.  However, you should remember that
  153. comments should not be used to replace good selection of variable
  154. names.  In this particular case, the comments add essentially
  155. nothing to the clarity of the program.
  156.  
  157.  
  158.  
  159. WHAT DOES PROTOTYPING COST?
  160. _________________________________________________________________
  161.  
  162. Prototyping is essentially free because it costs absolutely nothing
  163. concerning the run time size or speed of execution.  Prototyping
  164. is a compile time check and slows down the compile time a
  165. negligible amount because of the extra checking that the compiler
  166. must