home *** CD-ROM | disk | FTP | other *** search
- Chapter 6 - Defines and Macros
-
-
- DEFINES AND MACROS ARE AIDS TO CLEAR PROGRAMMING
-
- Load and display the file named DEFINE.C for your first
- look at some defines and macros. Notice the first four
- lines of the program each starting with the word "#define".
- This is the way all defines and macros are defined. Before
- the actual compilation starts, the compiler goes through a
- preprocessor pass to resolve all of the defines. In the
- present case, it will find every place in the program where
- the combination "START" is found and it will simply replace
- it with the 0 since that is the definition. The compiler
- itself will never see the word "START", so as far as the
- compiler is concerned, the zeros were always there. It
- should be clear to you by now that putting the word "START"
- in your program instead of the numeral 0 is only a
- convenience to you and actually acts like a comment since
- the word "START" helps you to understand what the zero is
- used for.
-
- In the case of a very small program, such as that
- before you, it doesn't really matter what you use. If,
- however, you had a 2000 line program before you with 27
- references to the START, it would be a completely different
- matter. If you wanted to change all of the STARTs in the
- program to a new number, it would be simple to change the
- one #define, but difficult to find and change all of the
- references to it manually, and possibly disastrous if you
- missed one or two of the references.
-
- In the same manner, the preprocessor will find all
- occurrences of the word "ENDING" and change them to 9, then
- the compiler will operate on the changed file with no
- knowledge that "ENDING" ever existed.
-
- It is a fairly common practice in C programming to use
- all capital letters for a symbolic constant such as "START"
- and "ENDING" and use all lower case letters for variable
- names. You can use any method you choose since it is mostly
- a matter of personal taste.
-
- IS THIS REALLY USEFUL?
-
- When we get to the chapters discussing input and
- output, we will need an indicator to tell us when we reach
- the end-of-file of an input file. Since different compilers
- use different numerical values for this, although most use
- either a zero or a minus 1, we will write the program with a
- "define" to define the EOF used by our particular compiler.
- If at some later date, we change to a new compiler, it is a
- simple matter to change this one "define" to fix the entire
- program. In Turbo C, the EOF is defined in the STDIO.H file
-
-
- Page 43
-
-
-
-
-
-
-
-
-
- Chapter 6 - Defines and Macros
-
-
- on line 44. You can observe this for yourself by listing
- this file.
-
- WHAT IS A MACRO?
-
- A macro is nothing more than another define, but since
- it is capable of at least appearing to perform some logical
- decisions or some math functions, it has a unique name.
- Consider the third line of the program on your screen for an
- example of a macro. In this case, anytime the preprocessor
- finds the word "MAX" followed by a group in parentheses, it
- expects to find two terms in the parentheses and will do a
- replacement of the terms into the second definition. Thus
- the first term will replace every "A" in the second
- definition and the second term will replace every "B" in the
- second definition. When line 12 of the program is reached,
- "index" will be substituted for every "A", and "count" will
- be substituted for every "B". Remembering the cryptic
- construct we studied a couple of chapters ago will reveal
- that "mx" will receive the maximum value of "index" or
- "count". In like manner, the "MIN" macro will result in
- "mn" receiving the minimum value of "index" or "count". The
- results are then printed out. There are a lot of seemingly
- extra parentheses in the macro definition but they are not
- extra, they are essential. We will discuss the extra
- parentheses in our next program.
-
- Compile and run DEFINE.C.
-
- LETS LOOK AT A WRONG MACRO
-
- Load the file named MACRO.C and display it on your
- screen for a better look at a macro and its use. The first
- line defines a macro named "WRONG" that appears to get the
- cube of "A", and indeed it does in some cases, but it fails
- miserably in others. The second macro named "CUBE" actually
- does get the cube in all cases.
-
- Consider the program itself where the CUBE of i+offset
- is calculated. If i is 1, which it is the first time
- through, then we will be looking for the cube of 1+5 = 6,
- which will result in 216. When using "CUBE", we group the
- values like this, (1+5)*(1+5)*(1+5) = 6*6*6 = 216. However,
- when we use WRONG, we group them as 1+5*1+5*1+5 = 1+5+5+5 =
- 16 which is a wrong answer. The parentheses are therefore
- required to properly group the variables together. It
- should be clear to you that either "CUBE" or "WRONG" would
- arrive at a correct answer for a single term replacement
- such as we did in the last program. The correct values of
- the cube and the square of the numbers are printed out as
- well as the wrong values for your inspection.
-
-
- Page 44
-
-
-
-
-
-
-
-
-
- Chapter 6 - Defines and Macros
-
-
-
- The remainder of the program is simple and will be left
- to your inspection and understanding.
-
-
- PROGRAMMING EXERCISE
-
- 1. Write a program to count from 7 to -5 by counting down.
- Use #define statements to define the limits. (Hint, you
- will need to use a decrementing variable in the third
- part of the "for" loop control.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 45
-