0% found this document useful (0 votes)
23 views9 pages

Macro

The preprocessor directives #include, #define, and conditional compilation allow code to be modified before compilation. #include inserts the contents of a header file. #define can create symbolic constants or macros. Conditional compilation with #if/#elif/#else/#endif/#ifdef/#ifndef compiles code conditionally based on constants being defined.

Uploaded by

ronaldomalik05
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views9 pages

Macro

The preprocessor directives #include, #define, and conditional compilation allow code to be modified before compilation. #include inserts the contents of a header file. #define can create symbolic constants or macros. Conditional compilation with #if/#elif/#else/#endif/#ifdef/#ifndef compiles code conditionally based on constants being defined.

Uploaded by

ronaldomalik05
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

Introduction

• Preprocessing
– Occurs before a program is compiled
– Inclusion of other files
– Definition of symbolic constants and macros
– Conditional compilation of program code
– Conditional execution of preprocessor directives
• Format of preprocessor directives
– Lines begin with #
– Only whitespace characters before directives on a
line
The #include Preprocessor Directive

• #include
– Copy of a specified file included in place of the directive
#include <filename> -
• Searches standard library for file
• Use for standard library files
#include "filename"
• Use for user-defined files
• Used for
• Searches current directory, then standard library
– Loading header files (#include <iostream>)
– Programs with multiple source files to be compiled together
– Header file - has common declarations and definitions (classes, structures,
function prototypes)
• #include statement in each file
The #define Preprocessor Directive: Symbolic
Constants

• #define
– Preprocessor directive used to create symbolic constants
and macros.
• Symbolic constants
– When program compiled, all occurrences of symbolic
constant replaced with replacement text
• Format
#define identifier replacement-text
– Example: #define PI 3.14159
– everything to right of identifier replaces text
#define PI = 3.14159
• replaces "PI" with " = 3.14159", probably results in an error
– Cannot redefine symbolic constants with more #define
statements
The #define Preprocessor Directive: Macros

• Macro
– Operation defined in #define
– Macro without arguments: treated like a symbolic
constant
– Macro with arguments: arguments substituted for
replacement text, macro expanded
– Performs a text substitution - no data type checking

Example:
#define CIRCLE_AREA( x ) ( (PI) * ( x ) * ( x ) )

area = CIRCLE_AREA( 4 );
is expanded to
area = ( 3.14159 * ( 4 ) * ( 4 ) );
The #define Preprocessor Directive: Macros

• Use parenthesis
– Without them:
#define CIRCLE_AREA( x ) ((PI) * ( x ) * ( x ))
#define CIRCLE_AREA( x ) PI * x * x
area = CIRCLE_AREA( c + 2 );
becomes
area = 3.14159 * c + 2 * c + 2;
• Evaluates incorrectly
• Macor’s advantage is that avoiding function overhead
– Macro inserts code directly.
• Macro’s disadvantage is that its argument may be evaluated
more than once.

double circleArea ( double x )


{ return 3.1415926 * x * x ;
}
The #define Preprocessor Directive:
Macros

• Multiple arguments
#define RECTANGLE_AREA( x, y ) ( ( x ) *
( y ) )
rectArea = RECTANGLE_AREA( a + 4, b +
7 );
becomes
rectArea = ( ( a + 4 ) * ( b + 7 ) );
The #define Preprocessor Directive: Macros

• #undef
– Undefines a symbolic constant or macro,
which can later be redefined
Conditional Compilation

• Conditional compilation
– Conditional Compilation directives help to compile a
specific portion of the program or let us skip
compilation of some specific part of the program
based on some conditions.
• Structure similar to if
#if !defined( NULL )
#define NULL 0
#endif
– Determines if symbolic constant NULL defined
• If NULL is defined, defined(NULL) evaluates to 1
• If NULL not defined, defines NULL as 0
– Every #if ends with #endif
– #ifdef short for #if defined(name)
– #ifndef short for #if !defined(name)
Conditional Compilation (II)

• Other statements
#elif - equivalent of else if in an if structure
#else - equivalent of else in an if structure

• "Comment out" code


– Cannot use /* ... */
– Use /* to prevent it from being compiled */
#if 0
code commented out
#endif
to enable code, change 0 to 1

You might also like