SlideShare a Scribd company logo
The Structure of a C++
Program
Outline
1. Separate Compilation
2. The # Preprocessor
3. Declarations and Definitions
4. Organizing Decls & Defs into Files
5. Project Directories & Libraries
1. Separate Compilation
 C++ programs can range from a handful
of statements to hundreds of thousands
 May be written by one person or by a
team
Single File Programs
 OK for small programs (CS150)
 But with large programs:
– compilation would take
minutes, hours, maybe days
 might break compiler
– Team members would
interfere with one another’s
work.
 “Are you still editing that file?
You’ve had it all afternoon.”
 “What do you mean you’re
saving changes to the file?
I’ve been editing it for the
last 45 minutes!”
Multiple File C++ Programs
 Team members can work in parallel on
separate files
 Files are compiled separately
– each individual compilation is fast
 Separately compiled code is linked to
produce the executable
– linking is much faster than compilation
Separate Compilation
 Each file of source code
– programming language text
 is compiled to produce a
file of object code
– binary code, almost
executable
– exact addresses of
variables and functions not
known, represented by
symbols
 All object code files linked
to produce the executable
– Linking mainly consists of
replacing symbols by real
addresses.
A.cpp
variables: a
functions: fa
calls: fb(a)
B.cpp
variables:
functions: fb
calls: fb(1)
C.cpp
variables: b
functions: main
calls: fa(a,b), fb(a), fb(b)
A.o
a: x1000
fa: x12A0
calls: fb(x1000)
B.o
fb: x2000
uses: x2000(1)
C.o
b: x3000
main: x3400
calls: fa(a,x3000), fb(a),
fb(x3000)
foo.exe
x2000(x1000)
x2000(1)
x12a0(X1000,X3000),
X2000(X1000), X2000(X3000)
COMPILING
LINKING
Source
Code
Object
Code
Executable
A.cpp
variables: a
functions: fa
calls: fb(a)
B.cpp
variables:
functions: fb
calls: fb(1)
C.cpp
variables: b
functions: main
calls: fa(a,b), fb(a), fb(b)
A.o
a: x1000
fa: x12A0
calls: fb(x1000)
B.o
fb: x2000
uses: x2000(1)
C.o
b: x3000
main: x3400
calls: fa(a,x3000), fb(a),
fb(x3000)
foo.exe
x2000(x1000)
x2000(1)
x12a0(X1000,X3000),
X2000(X1000), X2000(X3000)
COMPILING
LINKING
Source
Code
Object
Code
Executable
Large Projects
On large projects with hundreds to
thousands of files
 Typically only a few files are changed on
any one day
 Often only the changed files need to be
recompiled
 Then link the changed and unchanged
object code
2. The # Preprocessor
 The preprocessor runs before the compiler
proper
– modifies the source code
– processes preprocessor instructions
 lines beginning with #
– strips out comments
Processor Instructions
 #include
– insert a file
 #define
– define a macro
 #ifdef, #ifndef, #endif
– check to see if a macro has been defined
#include
 Inserts a file or header into the current
source code
 Two versions
– #insert <headerName>
 inserts a system header file from a location defined
when the compiler was installed
– #insert “fileName”
 inserts a file from the current directory
#include Example
 Suppose we have three files: A.h, B.h, C.cpp
 We ask the compiler to only run the
preprocessor and save the result:
g++ -E C.cpp > C.i
 The result is file C.i
– Note the presence of content from all three files
 includes markers telling where the content came from
#include Example 2
 In real programs, most of the code
actually seen by the compiler may come
from #include’s
– helloWorld.cpp
– helloWorld.i
#define
 Used to define macros (symbols that the
preprocessor will later substitute for)
– Sometimes used to supply constants
#define VersionNumber "1.0Beta1"
int main() {
cout << "Running version “
<< VersionNumber
<< endl;
 Much more elaborate macros are possible,
including ones with parameters
#ifdef, #ifndef, #endif
 Used to select code based upon whether a
macro has been defined:
#ifdef __GNUG__
/* Compiler is gcc/g++ */
#endif
#ifdef _MSC_VER
/* Compiler is Microsoft Visual C++
*/
#endif
#if, #define, and #include
 All of these macros are used to reduce the
amount of code seen by the actual compiler
 Suppose we have three files: A2.h, B2.h, C2.cpp
 We ask the compiler to only run the
preprocessor and save the result:
g++ -E C2.cpp > C2.i
 The result is file C2.i
– Note that the code from A2.h is included only once
– Imagine now, if that were iostream instead of A2.h
3. Declarations and Definitions
 Some of the most common error
messages are
– … is undeclared
– … is undefined
– … is defined multiple times
 Fixing these requires that you understand
the difference between declarations and
definitions
– and how they relate to the program structure
Declarations
 A declaration in C++
– introduces a name for something
– tells what “kind” of thing it is
– gives programmers enough information to use
it
Definitions
 A definition in C++
– introduces or repeats a name for something
– tells what “kind” of thing it is
– tells what value it has and/or how it works
– gives the compiler enough information to
generate this and assign it an address
General Rules for Decls & Defs
 All definitions are also declarations.
– But not vice-versa
 A name must be declared before you can write
any code that uses it.
 A name can be declared any number of times,
as long as the declarations are identical.
 A name must be defined exactly once,
somewhere within all the separately compiled
files making up a program.
D&D: Variables
 These are definitions of variables:
int x;
string s = “abc”;
MyFavoriteDataType mfdt (0);
 These are declarations:
extern int x;
extern string s;
extern MyFavoriteDataType mfdt;
D&D: Functions
 Declaration:
int myFunction (int x, int y);
 Definition
int myFunction (int x, int y)
{
return x + y;
}
 The declaration provides only the header.
the definition adds the body.
D&D: Data Types
 Data types in C++ are declared, but never
defined.
 These are declarations:
typedef float Weight;
typedef string* StringPointer;
enum Colors {red, blue, green};
 Later we will look at these type declarations
struct S { … };
class C { … };
4. Organizing Decls & Defs into
Files
5. Project Directories & Libraries

More Related Content

Similar to cppProgramStructure.ppt (20)

Introduction To C++ programming and its basic concepts
Introduction To C++ programming and its basic concepts
ssuserf86fba
 
The C++ Programming Language
The C++ Programming Language
Prof Ansari
 
2621008 - C++ 1
2621008 - C++ 1
S.Ali Sadegh Zadeh
 
Cpp-c++.pptx
Cpp-c++.pptx
LightroomApk
 
Fp201 unit2 1
Fp201 unit2 1
rohassanie
 
2CPP02 - C++ Primer
2CPP02 - C++ Primer
Michael Heron
 
Session 1 - c++ intro
Session 1 - c++ intro
VijayaNagarajan5
 
intro to programming languge c++ for computer department
intro to programming languge c++ for computer department
MemMem25
 
c++.pptx ppt representation of c plus lanjhgvghihh
c++.pptx ppt representation of c plus lanjhgvghihh
KeshavMotivation
 
Prog1-L1.pdf
Prog1-L1.pdf
valerie5142000
 
1. Introduction to C++ and brief history
1. Introduction to C++ and brief history
Ahmad177077
 
Overview of c++
Overview of c++
geeeeeet
 
C++ l 1
C++ l 1
vineet_singh
 
Introduction Of C++
Introduction Of C++
Sangharsh agarwal
 
Preprocessor
Preprocessor
Võ Hòa
 
C++ language basic
C++ language basic
Waqar Younis
 
0100_Embeded_C_CompilationProcess.pdf
0100_Embeded_C_CompilationProcess.pdf
KhaledIbrahim10923
 
Introduction to c++ programming language
Introduction to c++ programming language
Ahmad177077
 
introduction of c langauge(I unit)
introduction of c langauge(I unit)
Prashant Sharma
 
Programming Fundamentals IDE's Lec3.pptx
Programming Fundamentals IDE's Lec3.pptx
hafsanadeem31
 
Introduction To C++ programming and its basic concepts
Introduction To C++ programming and its basic concepts
ssuserf86fba
 
The C++ Programming Language
The C++ Programming Language
Prof Ansari
 
intro to programming languge c++ for computer department
intro to programming languge c++ for computer department
MemMem25
 
c++.pptx ppt representation of c plus lanjhgvghihh
c++.pptx ppt representation of c plus lanjhgvghihh
KeshavMotivation
 
1. Introduction to C++ and brief history
1. Introduction to C++ and brief history
Ahmad177077
 
Overview of c++
Overview of c++
geeeeeet
 
Preprocessor
Preprocessor
Võ Hòa
 
C++ language basic
C++ language basic
Waqar Younis
 
0100_Embeded_C_CompilationProcess.pdf
0100_Embeded_C_CompilationProcess.pdf
KhaledIbrahim10923
 
Introduction to c++ programming language
Introduction to c++ programming language
Ahmad177077
 
introduction of c langauge(I unit)
introduction of c langauge(I unit)
Prashant Sharma
 
Programming Fundamentals IDE's Lec3.pptx
Programming Fundamentals IDE's Lec3.pptx
hafsanadeem31
 

Recently uploaded (20)

ROLE PLAY: FIRST AID -CPR & RECOVERY POSITION.pptx
ROLE PLAY: FIRST AID -CPR & RECOVERY POSITION.pptx
Belicia R.S
 
How to Manage & Create a New Department in Odoo 18 Employee
How to Manage & Create a New Department in Odoo 18 Employee
Celine George
 
Unit- 4 Biostatistics & Research Methodology.pdf
Unit- 4 Biostatistics & Research Methodology.pdf
KRUTIKA CHANNE
 
Webcrawler_Mule_AIChain_MuleSoft_Meetup_Hyderabad
Webcrawler_Mule_AIChain_MuleSoft_Meetup_Hyderabad
Veera Pallapu
 
What are the benefits that dance brings?
What are the benefits that dance brings?
memi27
 
How to Configure Vendor Management in Lunch App of Odoo 18
How to Configure Vendor Management in Lunch App of Odoo 18
Celine George
 
Exploring Ocean Floor Features for Middle School
Exploring Ocean Floor Features for Middle School
Marie
 
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Rajdeep Bavaliya
 
LDMMIA Free Reiki Yoga S9 Grad Level Intuition II
LDMMIA Free Reiki Yoga S9 Grad Level Intuition II
LDM & Mia eStudios
 
Black and White Illustrative Group Project Presentation.pdf (1).pdf
Black and White Illustrative Group Project Presentation.pdf (1).pdf
AnnasofiaUrsini
 
Overview of Off Boarding in Odoo 18 Employees
Overview of Off Boarding in Odoo 18 Employees
Celine George
 
june 10 2025 ppt for madden on art science is over.pptx
june 10 2025 ppt for madden on art science is over.pptx
roger malina
 
Sustainable Innovation with Immersive Learning
Sustainable Innovation with Immersive Learning
Leonel Morgado
 
The Man In The Back – Exceptional Delaware.pdf
The Man In The Back – Exceptional Delaware.pdf
dennisongomezk
 
Publishing Your Memoir with Brooke Warner
Publishing Your Memoir with Brooke Warner
Brooke Warner
 
Allomorps and word formation.pptx - Google Slides.pdf
Allomorps and word formation.pptx - Google Slides.pdf
Abha Pandey
 
Unit 3 Poster Sketches with annotations.pptx
Unit 3 Poster Sketches with annotations.pptx
bobby205207
 
Final Sketch Designs for poster production.pptx
Final Sketch Designs for poster production.pptx
bobby205207
 
BUSINESS QUIZ PRELIMS | QUIZ CLUB OF PSGCAS | 9 SEPTEMBER 2024
BUSINESS QUIZ PRELIMS | QUIZ CLUB OF PSGCAS | 9 SEPTEMBER 2024
Quiz Club of PSG College of Arts & Science
 
How to Manage Inventory Movement in Odoo 18 POS
How to Manage Inventory Movement in Odoo 18 POS
Celine George
 
ROLE PLAY: FIRST AID -CPR & RECOVERY POSITION.pptx
ROLE PLAY: FIRST AID -CPR & RECOVERY POSITION.pptx
Belicia R.S
 
How to Manage & Create a New Department in Odoo 18 Employee
How to Manage & Create a New Department in Odoo 18 Employee
Celine George
 
Unit- 4 Biostatistics & Research Methodology.pdf
Unit- 4 Biostatistics & Research Methodology.pdf
KRUTIKA CHANNE
 
Webcrawler_Mule_AIChain_MuleSoft_Meetup_Hyderabad
Webcrawler_Mule_AIChain_MuleSoft_Meetup_Hyderabad
Veera Pallapu
 
What are the benefits that dance brings?
What are the benefits that dance brings?
memi27
 
How to Configure Vendor Management in Lunch App of Odoo 18
How to Configure Vendor Management in Lunch App of Odoo 18
Celine George
 
Exploring Ocean Floor Features for Middle School
Exploring Ocean Floor Features for Middle School
Marie
 
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Rajdeep Bavaliya
 
LDMMIA Free Reiki Yoga S9 Grad Level Intuition II
LDMMIA Free Reiki Yoga S9 Grad Level Intuition II
LDM & Mia eStudios
 
Black and White Illustrative Group Project Presentation.pdf (1).pdf
Black and White Illustrative Group Project Presentation.pdf (1).pdf
AnnasofiaUrsini
 
Overview of Off Boarding in Odoo 18 Employees
Overview of Off Boarding in Odoo 18 Employees
Celine George
 
june 10 2025 ppt for madden on art science is over.pptx
june 10 2025 ppt for madden on art science is over.pptx
roger malina
 
Sustainable Innovation with Immersive Learning
Sustainable Innovation with Immersive Learning
Leonel Morgado
 
The Man In The Back – Exceptional Delaware.pdf
The Man In The Back – Exceptional Delaware.pdf
dennisongomezk
 
Publishing Your Memoir with Brooke Warner
Publishing Your Memoir with Brooke Warner
Brooke Warner
 
Allomorps and word formation.pptx - Google Slides.pdf
Allomorps and word formation.pptx - Google Slides.pdf
Abha Pandey
 
Unit 3 Poster Sketches with annotations.pptx
Unit 3 Poster Sketches with annotations.pptx
bobby205207
 
Final Sketch Designs for poster production.pptx
Final Sketch Designs for poster production.pptx
bobby205207
 
How to Manage Inventory Movement in Odoo 18 POS
How to Manage Inventory Movement in Odoo 18 POS
Celine George
 
Ad

cppProgramStructure.ppt

  • 1. The Structure of a C++ Program
  • 2. Outline 1. Separate Compilation 2. The # Preprocessor 3. Declarations and Definitions 4. Organizing Decls & Defs into Files 5. Project Directories & Libraries
  • 3. 1. Separate Compilation  C++ programs can range from a handful of statements to hundreds of thousands  May be written by one person or by a team
  • 4. Single File Programs  OK for small programs (CS150)  But with large programs: – compilation would take minutes, hours, maybe days  might break compiler – Team members would interfere with one another’s work.  “Are you still editing that file? You’ve had it all afternoon.”  “What do you mean you’re saving changes to the file? I’ve been editing it for the last 45 minutes!”
  • 5. Multiple File C++ Programs  Team members can work in parallel on separate files  Files are compiled separately – each individual compilation is fast  Separately compiled code is linked to produce the executable – linking is much faster than compilation
  • 6. Separate Compilation  Each file of source code – programming language text  is compiled to produce a file of object code – binary code, almost executable – exact addresses of variables and functions not known, represented by symbols  All object code files linked to produce the executable – Linking mainly consists of replacing symbols by real addresses. A.cpp variables: a functions: fa calls: fb(a) B.cpp variables: functions: fb calls: fb(1) C.cpp variables: b functions: main calls: fa(a,b), fb(a), fb(b) A.o a: x1000 fa: x12A0 calls: fb(x1000) B.o fb: x2000 uses: x2000(1) C.o b: x3000 main: x3400 calls: fa(a,x3000), fb(a), fb(x3000) foo.exe x2000(x1000) x2000(1) x12a0(X1000,X3000), X2000(X1000), X2000(X3000) COMPILING LINKING Source Code Object Code Executable
  • 7. A.cpp variables: a functions: fa calls: fb(a) B.cpp variables: functions: fb calls: fb(1) C.cpp variables: b functions: main calls: fa(a,b), fb(a), fb(b) A.o a: x1000 fa: x12A0 calls: fb(x1000) B.o fb: x2000 uses: x2000(1) C.o b: x3000 main: x3400 calls: fa(a,x3000), fb(a), fb(x3000) foo.exe x2000(x1000) x2000(1) x12a0(X1000,X3000), X2000(X1000), X2000(X3000) COMPILING LINKING Source Code Object Code Executable
  • 8. Large Projects On large projects with hundreds to thousands of files  Typically only a few files are changed on any one day  Often only the changed files need to be recompiled  Then link the changed and unchanged object code
  • 9. 2. The # Preprocessor  The preprocessor runs before the compiler proper – modifies the source code – processes preprocessor instructions  lines beginning with # – strips out comments
  • 10. Processor Instructions  #include – insert a file  #define – define a macro  #ifdef, #ifndef, #endif – check to see if a macro has been defined
  • 11. #include  Inserts a file or header into the current source code  Two versions – #insert <headerName>  inserts a system header file from a location defined when the compiler was installed – #insert “fileName”  inserts a file from the current directory
  • 12. #include Example  Suppose we have three files: A.h, B.h, C.cpp  We ask the compiler to only run the preprocessor and save the result: g++ -E C.cpp > C.i  The result is file C.i – Note the presence of content from all three files  includes markers telling where the content came from
  • 13. #include Example 2  In real programs, most of the code actually seen by the compiler may come from #include’s – helloWorld.cpp – helloWorld.i
  • 14. #define  Used to define macros (symbols that the preprocessor will later substitute for) – Sometimes used to supply constants #define VersionNumber "1.0Beta1" int main() { cout << "Running version “ << VersionNumber << endl;  Much more elaborate macros are possible, including ones with parameters
  • 15. #ifdef, #ifndef, #endif  Used to select code based upon whether a macro has been defined: #ifdef __GNUG__ /* Compiler is gcc/g++ */ #endif #ifdef _MSC_VER /* Compiler is Microsoft Visual C++ */ #endif
  • 16. #if, #define, and #include  All of these macros are used to reduce the amount of code seen by the actual compiler  Suppose we have three files: A2.h, B2.h, C2.cpp  We ask the compiler to only run the preprocessor and save the result: g++ -E C2.cpp > C2.i  The result is file C2.i – Note that the code from A2.h is included only once – Imagine now, if that were iostream instead of A2.h
  • 17. 3. Declarations and Definitions  Some of the most common error messages are – … is undeclared – … is undefined – … is defined multiple times  Fixing these requires that you understand the difference between declarations and definitions – and how they relate to the program structure
  • 18. Declarations  A declaration in C++ – introduces a name for something – tells what “kind” of thing it is – gives programmers enough information to use it
  • 19. Definitions  A definition in C++ – introduces or repeats a name for something – tells what “kind” of thing it is – tells what value it has and/or how it works – gives the compiler enough information to generate this and assign it an address
  • 20. General Rules for Decls & Defs  All definitions are also declarations. – But not vice-versa  A name must be declared before you can write any code that uses it.  A name can be declared any number of times, as long as the declarations are identical.  A name must be defined exactly once, somewhere within all the separately compiled files making up a program.
  • 21. D&D: Variables  These are definitions of variables: int x; string s = “abc”; MyFavoriteDataType mfdt (0);  These are declarations: extern int x; extern string s; extern MyFavoriteDataType mfdt;
  • 22. D&D: Functions  Declaration: int myFunction (int x, int y);  Definition int myFunction (int x, int y) { return x + y; }  The declaration provides only the header. the definition adds the body.
  • 23. D&D: Data Types  Data types in C++ are declared, but never defined.  These are declarations: typedef float Weight; typedef string* StringPointer; enum Colors {red, blue, green};  Later we will look at these type declarations struct S { … }; class C { … };
  • 24. 4. Organizing Decls & Defs into Files
  • 25. 5. Project Directories & Libraries