Macros are small functions (generally single line functions) which may be dealt with the help of preprocessor directive #define. Here, we shall discuss only the directive #define which is also used to define constants. A macro may or may not have parameters. An advantage of using a macro is that if a program involves a large number of the function calls of a small function the overburden of function calls can make the program inefficient; in case of macro, the code is substituted wherever the macro occurs. Thus, a programmer does not have to repeat the code again and again in the source code of the program while the function call is eliminated. However, a disadvantage of using macro is that data types are not included in the macro nor are these checked by the compiler. A few illustrations of macros are given below.
(i) A macro for finding greater of two numbers may be defined as below.
#define max(x,y) (x>y ? x:y)
In the above expression some spaces are important. There is at least one space between #define and max (x, y) but there is no space between max and the left bracket '('.Again there is at least one space between max (x, y) and the expression (x > y ? x : y)
(ii) A macro for display of a message is illustrated below.
#define Message "Hello World!"
Note that there is at least one space between #define and Message and between Message and the string "Hello World!"
(iii) A macro for finding area of circle is illustrated as given below.
#define Area(R) 3.14159*(R)*(R)
You will notice that there is at least one space between #define and Area (R) and between Area (R) and 3. 14l59*R*R. However, there is no space between Area and the left parenthesis '('. The variable R is put in parentheses so that there is no error even if R is substituted as R + A. Application of two macros is illustrated in Program: one finds the greater of two numbers, while the other displays a message.
Illustrates defining a macro in a program
# include <stdio.h>
#define max(m,n,p) ((m>n? m:n)>p? (m>n? m:n): p)
# define Message "See I have done it."
printf("Write three integers :");
scanf("%d %d %d", &x, &y, &z);
printf("The maximum of the three numbers is %d.\n" ,max(x,y,z));