Presentation is loading. Please wait.

Presentation is loading. Please wait.

The C Preprocessor Yongjoon Lee April 22, 2005. What is it? Things with # –#include Processes the C source files BEFORE handing it to compiler. –`Pre`-process.

Similar presentations


Presentation on theme: "The C Preprocessor Yongjoon Lee April 22, 2005. What is it? Things with # –#include Processes the C source files BEFORE handing it to compiler. –`Pre`-process."— Presentation transcript:

1 The C Preprocessor Yongjoon Lee April 22, 2005

2 What is it? Things with # –#include Processes the C source files BEFORE handing it to compiler. –`Pre`-process –gcc –E –cpp

3 Why care? File Inclusion Basic Macros Parameterized Macros Conditional Compilation Style and (mis)use of Macros

4 File Inclusion Recall : #include –#include System directories –#include “foo.h” Current directories –gcc -I

5 Macros We can #define constants #define HALF_PI 1.5708 #define BAD_PI HALF_PI+HALF_PI Solution? ((((((((((The parentheses!)))))))))) #define PI ((HALF_PI)+(HALF_PI))

6 Parameterized Macros Macros with param : #define BAAAD_DOUBLE(x) (x*2) #define BAD_DOUBLE(x) ((x)+(x)) #define OKAY_DOUBLE(x) ((x)*2) WHAT TO TAKE HOME: –Don’t use 2+ parameters. –No assignments within macro

7 Parameterized Macros cont’d Want to wrap malloc() calls. –Can we? YES! #define NEW_T(t,sz) ((t*) malloc((sz)*sizeof(t))

8 Appropriate use of Macros Do –Use parentheses –Handle header file inclusion –Capitalize macro names Don’t –Use more than 2 parameters. –Replace function calls with macros for ‘performance’ –Make the code harder to read #define LOOP(s) while(1) {s};

9 Conditional Inclusion #if #ifdef #ifndef #elif #else #endif

10 Conditional Compilation Debugging #define DEBUG_MODE #ifdef DEBUG_MODE /* … Debug code … */ #endif OS/Platform #ifdef _WIN32 #include #elif /* …… */

11 File Header File header –#ifndef FOO_H #define FOO_H /* … the whole file … * #endif Why??? –Global variables –Cycles of includes –Inefficient

12 The Printf Yongjoon Lee April 22, 2005

13 Basics printf(“format string”,vars); Format string? –“This year is %d\n” –“Your score is %d\n” Conversion by % –%d : int –%f : float, double –%c : char –%s : char *, string –%e : float, double in scientific form

14 Examples %d conversion Padding ( width ) %12d %012d Precision %12.4d %12.6d Left/right justification %12d %-12d Similar in %f, %e, … conversions

15 Example %c, %s conversion %c has only precision 1 Precision in %s means string length starting from the beginning Padding and justification are same


Download ppt "The C Preprocessor Yongjoon Lee April 22, 2005. What is it? Things with # –#include Processes the C source files BEFORE handing it to compiler. –`Pre`-process."

Similar presentations


Ads by Google