Saturday, 19 January 2013

Preprocessor Directives in C

Preprocessor extends the power of C programming language. Line that begin with # are called preprocessing directives.

Use of #include

Let us consider very common preprocessing directive as below:
#include <stdio.h>
Here, "stdio.h" is a header file and the preprocessor replace the above line with the contents of header file.

Use of #define

Preprocessing directive #define has two forms. The first form is:
#define identifier token_string
token_string part is optional but, are used almost every time in program.

Example of #define

#define c 299792458 /*speed of light in m/s */
The token string in above line 2299792458 is replaced in every occurance of symbolic constant c.
C Program to find area of a cricle. [Area of circle=πr2]
#include <stdio.h>
#define PI 3.1415
int main(){
    int radius;
    float area;
    printf("Enter the radius: ");
    scanf("%d",&radius);
    area=PI*radius*radius;
    printf("Area=%.2f",area);
    return 0;
}
Output
Enter the radius: 3 
Area=28.27

Syntactic Sugar

Syntactic sugar is the alteration of programming syntax according to the will of programmer. For example:
#define LT <
Every time the program encounters LT, it will be replaced by <.
Second form of preprocessing directive with #define is:

Macros with argument

Preprocessing directive #define can be used to write macro definitions with parameters as well in the form below:
#define identifier(identifier 1,.....identifier n) token_string
Again, the token string is optional but, are used in almost every case. Let us consider an example of macro definition with argument.
#define area(r) (3.1415*r*r)
Here, the argument passed is r. Every time the program encounters area(argument), it will be replace by (3.1415*argument*argument). Suppose, we passed (r1+5) as argument then, it expands as below:
area(r1+5) expands to (3.1415*(r1+5)(r1+5))
C Program to find area of a circle, passing arguments to macros. [Area of circle=πr2]
#include <stdio.h>
#define PI 3.1415
#define area(r) (PI*r*r)
int main(){
    int radius;
    float area;
    printf("Enter the radius: ");
    scanf("%d",&radius);
    area=area(radius);
    printf("Area=%.2f",area);
    return 0;
}

Predefined Macros in C language

Predefined macro Value
__DATE__ String containing the current date
__FILE__ String containing the file name
__LINE__ Integer representing the current line number
__STDC__ If follows ANSI standard C, then value is a nonzero integer
__TIME__ String containing the current date.

How to use predefined Macros?

C Program to find the current time
#include <stdio.h>
int main(){
   printf("Current time: %s",__TIME__);   //calculate the current time
}
Output
Current time: 19:54:39

1 comment:

Anonymous said...

Keep this going please, great job!

My homepage: workout