Practical C++ Programming By Steven Oualline Here are changes made to the book in the 12/98 reprint: {138} replaced Example 9-7. value/bic.cc with the following: const int ARRAY_SIZE = 5 // Size of the array int item_array[ARRAY_SIZE] = {1, 2, 5000, 3, 4}; // An array int &biggest(void) { int index; // Current index int biggest; // Index of the biggest element // Assume the first is the biggest biggest = 0; for (index = 1; index < ARRAY_SIZE; ++index) { if (item_array[biggest] < item_array[index]) biggest = index; } return (item_array[biggest]); } {139} code sample -3, line -1: replaced cout << biggest(item_array, 5) << '\n': with cout << biggest() << '\n'; {161} Changed the font style of paragraphs from Question 10-5 to Question 10-6 from italics to regular. {165} Answer 10-5 now reads The problem is that the preprocessor does not understand C++ syntax. The macro call SQR(counter+1) expands to (counter+1 * counter+1) The result is not the same as ((counter+1) * (counter+1)). To avoid this problem, use inline functions instead of parameterized macros. inline int SQR(int x) { return (x*x);} If you must use parameterized macros, enclose each use of the parameter in parnetheses. #define SQR(x) ((x) * (x)) {232}line -4 "If you put the const after the *, we tell C++ that the data is constant." now reads "If you put the const after the *, we tell C++ that the pointer is constant." (changed "data" to "pointer")