SlideShare a Scribd company logo
1 of 15
The C Preprocessor
Yongjoon Lee
April 22, 2005
What is it?
• Things with #
– #include <stdio.h>
• Processes the C source files
BEFORE handing it to compiler.
– `Pre`-process
– gcc –E
– cpp
Why care?
• File Inclusion
• Basic Macros
• Parameterized Macros
• Conditional Compilation
• Style and (mis)use of Macros
File Inclusion
• Recall : #include <filename>
– #include <foo.h>
• System directories
– #include “foo.h”
• Current directories
– gcc -I
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))
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
Parameterized Macros cont’d
• Want to wrap malloc() calls.
– Can we?
• YES!
#define NEW_T(t,sz)
((t*) malloc((sz)*sizeof(t))
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};
Conditional Inclusion
• #if
• #ifdef
• #ifndef
• #elif
• #else
• #endif
Conditional Compilation
• Debugging
#define DEBUG_MODE
#ifdef DEBUG_MODE
/* … Debug code … */
#endif
• OS/Platform
#ifdef _WIN32
#include <windows.h>
#elif
/* …… */
File Header
• File header
– #ifndef FOO_H
#define FOO_H
/* … the whole file … *
#endif
• Why???
– Global variables
– Cycles of includes
– Inefficient
The Printf
Yongjoon Lee
April 22, 2005
Basics
• printf(“format string”,vars);
• Format string?
– “This year is %dn”
– “Your score is %dn”
• Conversion by %
– %d : int
– %f : float, double
– %c : char
– %s : char *, string
– %e : float, double in scientific form
Examples %d conversion
• Padding ( width )
%12d
%012d
• Precision
%12.4d
%12.6d
• Left/right justification
%12d
%-12d
• Similar in %f, %e, … conversions
Example %c, %s conversion
• %c has only precision 1
• Precision in %s means string length
starting from the beginning
• Padding and justification are same

More Related Content

Similar to lec12.ppt

C++_programs.ppt
C++_programs.pptC++_programs.ppt
C++_programs.ppt
EPORI
 
C++ programming: Basic introduction to C++.ppt
C++ programming: Basic introduction to C++.pptC++ programming: Basic introduction to C++.ppt
C++ programming: Basic introduction to C++.ppt
yp02
 
Abhishek lingineni
Abhishek lingineniAbhishek lingineni
Abhishek lingineni
abhishekl404
 

Similar to lec12.ppt (20)

C++_programs.ppt
C++_programs.pptC++_programs.ppt
C++_programs.ppt
 
C++ programming: Basic introduction to C++.ppt
C++ programming: Basic introduction to C++.pptC++ programming: Basic introduction to C++.ppt
C++ programming: Basic introduction to C++.ppt
 
C++_programs.ppt
C++_programs.pptC++_programs.ppt
C++_programs.ppt
 
C++_programs.ppt
C++_programs.pptC++_programs.ppt
C++_programs.ppt
 
C++_programs.ppt
C++_programs.pptC++_programs.ppt
C++_programs.ppt
 
C++_programs.ppt
C++_programs.pptC++_programs.ppt
C++_programs.ppt
 
C++ Advanced Features
C++ Advanced FeaturesC++ Advanced Features
C++ Advanced Features
 
C++ Advanced Features
C++ Advanced FeaturesC++ Advanced Features
C++ Advanced Features
 
PyParis 2017 / Writing a C Python extension in 2017, Jean-Baptiste Aviat
PyParis 2017 / Writing a C Python extension in 2017, Jean-Baptiste Aviat PyParis 2017 / Writing a C Python extension in 2017, Jean-Baptiste Aviat
PyParis 2017 / Writing a C Python extension in 2017, Jean-Baptiste Aviat
 
Reproducible research
Reproducible researchReproducible research
Reproducible research
 
C++ unit-1-part-6
C++ unit-1-part-6C++ unit-1-part-6
C++ unit-1-part-6
 
Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024
 
Abhishek lingineni
Abhishek lingineniAbhishek lingineni
Abhishek lingineni
 
CPlusPus
CPlusPusCPlusPus
CPlusPus
 
2015 bioinformatics bio_python
2015 bioinformatics bio_python2015 bioinformatics bio_python
2015 bioinformatics bio_python
 
Patching Windows Executables with the Backdoor Factory | DerbyCon 2013
Patching Windows Executables with the Backdoor Factory | DerbyCon 2013Patching Windows Executables with the Backdoor Factory | DerbyCon 2013
Patching Windows Executables with the Backdoor Factory | DerbyCon 2013
 
Python高级编程(二)
Python高级编程(二)Python高级编程(二)
Python高级编程(二)
 
Effective CMake
Effective CMakeEffective CMake
Effective CMake
 
201705 metaprogramming in julia
201705 metaprogramming in julia201705 metaprogramming in julia
201705 metaprogramming in julia
 
introduction of c langauge(I unit)
introduction of c langauge(I unit)introduction of c langauge(I unit)
introduction of c langauge(I unit)
 

Recently uploaded

會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
中 央社
 

Recently uploaded (20)

DEMONSTRATION LESSON IN ENGLISH 4 MATATAG CURRICULUM
DEMONSTRATION LESSON IN ENGLISH 4 MATATAG CURRICULUMDEMONSTRATION LESSON IN ENGLISH 4 MATATAG CURRICULUM
DEMONSTRATION LESSON IN ENGLISH 4 MATATAG CURRICULUM
 
8 Tips for Effective Working Capital Management
8 Tips for Effective Working Capital Management8 Tips for Effective Working Capital Management
8 Tips for Effective Working Capital Management
 
OS-operating systems- ch05 (CPU Scheduling) ...
OS-operating systems- ch05 (CPU Scheduling) ...OS-operating systems- ch05 (CPU Scheduling) ...
OS-operating systems- ch05 (CPU Scheduling) ...
 
An overview of the various scriptures in Hinduism
An overview of the various scriptures in HinduismAn overview of the various scriptures in Hinduism
An overview of the various scriptures in Hinduism
 
Observing-Correct-Grammar-in-Making-Definitions.pptx
Observing-Correct-Grammar-in-Making-Definitions.pptxObserving-Correct-Grammar-in-Making-Definitions.pptx
Observing-Correct-Grammar-in-Making-Definitions.pptx
 
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
 
VAMOS CUIDAR DO NOSSO PLANETA! .
VAMOS CUIDAR DO NOSSO PLANETA!                    .VAMOS CUIDAR DO NOSSO PLANETA!                    .
VAMOS CUIDAR DO NOSSO PLANETA! .
 
Improved Approval Flow in Odoo 17 Studio App
Improved Approval Flow in Odoo 17 Studio AppImproved Approval Flow in Odoo 17 Studio App
Improved Approval Flow in Odoo 17 Studio App
 
Book Review of Run For Your Life Powerpoint
Book Review of Run For Your Life PowerpointBook Review of Run For Your Life Powerpoint
Book Review of Run For Your Life Powerpoint
 
Sternal Fractures & Dislocations - EMGuidewire Radiology Reading Room
Sternal Fractures & Dislocations - EMGuidewire Radiology Reading RoomSternal Fractures & Dislocations - EMGuidewire Radiology Reading Room
Sternal Fractures & Dislocations - EMGuidewire Radiology Reading Room
 
When Quality Assurance Meets Innovation in Higher Education - Report launch w...
When Quality Assurance Meets Innovation in Higher Education - Report launch w...When Quality Assurance Meets Innovation in Higher Education - Report launch w...
When Quality Assurance Meets Innovation in Higher Education - Report launch w...
 
male presentation...pdf.................
male presentation...pdf.................male presentation...pdf.................
male presentation...pdf.................
 
How To Create Editable Tree View in Odoo 17
How To Create Editable Tree View in Odoo 17How To Create Editable Tree View in Odoo 17
How To Create Editable Tree View in Odoo 17
 
Climbers and Creepers used in landscaping
Climbers and Creepers used in landscapingClimbers and Creepers used in landscaping
Climbers and Creepers used in landscaping
 
Đề tieng anh thpt 2024 danh cho cac ban hoc sinh
Đề tieng anh thpt 2024 danh cho cac ban hoc sinhĐề tieng anh thpt 2024 danh cho cac ban hoc sinh
Đề tieng anh thpt 2024 danh cho cac ban hoc sinh
 
An Overview of the Odoo 17 Knowledge App
An Overview of the Odoo 17 Knowledge AppAn Overview of the Odoo 17 Knowledge App
An Overview of the Odoo 17 Knowledge App
 
Mattingly "AI and Prompt Design: LLMs with NER"
Mattingly "AI and Prompt Design: LLMs with NER"Mattingly "AI and Prompt Design: LLMs with NER"
Mattingly "AI and Prompt Design: LLMs with NER"
 
Analyzing and resolving a communication crisis in Dhaka textiles LTD.pptx
Analyzing and resolving a communication crisis in Dhaka textiles LTD.pptxAnalyzing and resolving a communication crisis in Dhaka textiles LTD.pptx
Analyzing and resolving a communication crisis in Dhaka textiles LTD.pptx
 
Spring gala 2024 photo slideshow - Celebrating School-Community Partnerships
Spring gala 2024 photo slideshow - Celebrating School-Community PartnershipsSpring gala 2024 photo slideshow - Celebrating School-Community Partnerships
Spring gala 2024 photo slideshow - Celebrating School-Community Partnerships
 
Major project report on Tata Motors and its marketing strategies
Major project report on Tata Motors and its marketing strategiesMajor project report on Tata Motors and its marketing strategies
Major project report on Tata Motors and its marketing strategies
 

lec12.ppt

  • 1. The C Preprocessor Yongjoon Lee April 22, 2005
  • 2. What is it? • Things with # – #include <stdio.h> • 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 <filename> – #include <foo.h> • 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 <windows.h> #elif /* …… */
  • 11. File Header • File header – #ifndef FOO_H #define FOO_H /* … the whole file … * #endif • Why??? – Global variables – Cycles of includes – Inefficient
  • 13. Basics • printf(“format string”,vars); • Format string? – “This year is %dn” – “Your score is %dn” • 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