The preprocessor
This presentation is the property of its rightful owner.
Sponsored Links
1 / 19

The Preprocessor PowerPoint PPT Presentation


  • 84 Views
  • Uploaded on
  • Presentation posted in: General

The Preprocessor. Introduction. The preprocessor is a program that processes that source code before it passes through the compiler. It operates under the control of directives . Directives are placed before the main lines. Directives begin with the symbol #. Preporecessor. Compiler.

Download Presentation

The Preprocessor

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


The preprocessor

The Preprocessor


Introduction

Introduction

  • The preprocessor is a program that processes that source code before it passes through the compiler.

  • It operates under the control of directives.

  • Directives are placed before the main lines.

  • Directives begin with the symbol #.

Preporecessor

Compiler

Linker

Binary code


Macro substituion

Macro substituion

  • Macro substitution is a process where an identifies in a program is replaced by predefined string composed of one or more tokens.

    #define identifier string

    • The string may be any test

    • The identifies must be a valid C name.

  • Forms of macro substitution

    • Simple macro substitution

    • Argumented macro substitution

    • Nested macro substitution.


Simple macro substitution

Simple Macro substitution

  • Simple string replacement is commonly used to define constants

  • A definition, such as

    will replace all occurrences of M width 5

unchanged


Simple macro substitution1

Simple Macro substitution

  • A macro definition can include more than simple constants value.

  • Consider the evaluation of the equation

    Where D and A are macros defined as follows

    The result of the preprocessor’s substitution for D and A is

    Correct results can be obtained by using parentheses around the strings as


Simple macro substitution2

Simple Macro substitution

  • The preprocessor preforms a literal text substitution, whenever the defined name occurs. Thus we can use a macro to define almost anything.

Is this valid C program?


Simple macro substitution3

Simple Macro substitution

  • The preprocessor preforms a literal text substitution, whenever the defined name occurs. Thus we can use a macro to define almost anything.


Macros with arguments

Macros with arguments

  • The preprocessor permits us to define complex and more useful form of replacements.

    #defineidentifier(f1, f2,…,fn)string

    Example


Macros with arguments commonly used macros

Macros with arguments: Commonly used macros

  • The argument supplied to a macro can be any series of characters. For example, the definition

    Can be called-in by

    The preprocessor will expand this as


Nesting macros

Nesting Macros

  • We can also use one macro in the definition of another macro.

  • The preprocessor expands each #define macro, until no more macros appear in the text.


File inclusion

File inclusion

  • An external file containing functions or macro definitions can be included as a part of a program so that we need no rewrite those functions or macro definitions.

    #include “filename”

    where filename is the name of the file containing the required definitions of functions.

    Double quotes specifies to search of the file first in the current directory and then in the standard directories.

    #include<filename>

    The file is searched only in the standard directories


File inclusion1

File inclusion

  • Let us assume we have created the following three files:

    • syntax.ccontains syntax definitions.

    • stat.ccontains statistical functions

    • test.ccontains test functions

  • We can make use of a definition or functions contained in any of these files by including them in the program as


Compiler control directives

Compiler control directives

  • While developing large program, you may face one or more of the following situations

    • You have included a file containing some macro definitions. It is not known whether a particular macro (say, TEST) has been defined in that head file. However, you want to be certain that TEST is defined (or not defined).

    • Suppose a customer has two different types of computers and you are required to write a program that will run on both systems. You want to use the same program, although certain lines of code must be different for each system.


Compiler control directives1

Compiler control directives

  • You are developing a program for selling in the open market. Some customers may insist on having certain additional features. However, you would like to have a single program that would satisfy both types of customers.

  • Suppose you are in the process of testing your program which is rather a large one. You would like to have print calls inserted in certain places to display intermediate results and messages in order to trace the flow of execution and errors, if any. You want these statements to be ‘active’ only when you decide so.


Situation 1

Situation 1

  • We want to ensure that the macro TEST is always defined, irrespective of whether it has been define in the header file or not.

  • define.h is the header file that is supposed to contain the definition of TEST macro. The directive

    Searches for the definition of TEST in the header file and if not defined, then all the lines between the #ifndefand the coresponding#endifare left ‘active’ in the program.


Situation 11

Situation 1

  • In case, the TEST has been defined in the header file, #ifndef condition becomes false, therefore the directive #define TEST is ignored. Remember, you cannot simply write

    #define TEST 1

    Because if TEST is already define, an error will occur.

  • Similar is the case when we want the macro TEST never to be defined


Situation 2

Situation 2

  • The main concern here is to make the program portable. This can be achieved as follows:

  • If we want the program to run on Windows, we include the directive


Situation 3

Situation 3

  • This is similar to previous situation and therefore the control directive take the following form

  • Group-A lines are included if the customer ABC is defined. Otherwise, group-B lines are included.


Situation 4

Situation 4

  • Debugging and testing are done to detect errors in the program.

  • The process of error detection and isolation begins with the testing of the program with known set of test data. The program is divided down and printf statements are placed in different parts to see intermediate results. (debugging statements).

  • Once the errors are isolated and corrected we don’t need them. Thus, they can be deleted or alternatively make them inactive using control directive as


  • Login