COMPONENTS OF A C++ SOURCE FILE Aims
To enable
students to: ·
understand
the structure of a C++ source file ·
operate
the preprocessor ·
declare
variables of an appropriate data type ·
write
and use functions Understand the
structure of a C++ source file
Sample
ProgramNotes /****************************************************/
Describes the purpose of
/**/
this source file. /*
Module name: sample.cpp*/ /**/ /*
Description: Writes “Hello World” to the screen. */ /**/ /*
Date: 10/10/1998*/ /**/ /*
Change History:*/ /**/ /*
10/10/1998 Module creation by RF*/ /**/ /****************************************************/ /****************************************************/
Reference any header files
/*
Header files*/required by this source /****************************************************/
file - in this case #include
<iostream.h>iostream.h as we use cout. /****************************************************/
Constants used in this /*
Constant definitions*/source file - in this case /****************************************************/
there are none. /*
-- none --*/ /****************************************************/
Functions declared within /*
Function prototypes*/this source file, in this /****************************************************/
case none other than the /*
-- none --*/special function main. /****************************************************/
Describes the purpose of /**/
the function. /*
Function name: main*/ /**/ /*
Description: Main function of the program.*/ /**/ /*
Parameters: none*/ /**/ /*
Returns: none*/ /**/ /*
Change History:*/ /**/ /*
10/10/1998 Function creation by RF*/ /**/ /****************************************************/ void
main () { cout << “Hello World\n”; } ·
#include provides access to library routines ·
all
programs must have a function main () ·
; terminates statements ·
cout sends output to the screen ·
“” indicates a string literal ·
\n prints a newline ·
C++ is
case sensitive ·
{…} marks the beginning and end of program blocks (functions, loops, etc.) Operate the
preprocessor
Before
converting source to object code the compiler will execute the preprocessor.
The preprocessor performs preliminary operations on C++ files before they are
passed to the compiler. The preprocessor allows you to: ·
Define
and undefine macros. ·
Expand
macros. ·
Conditionally
compile code (i.e. direct the actions of the compiler during compilation). ·
Insert
specified files. ·
Specify
compile-time error messages. ·
Apply
machine-specific rules to specified sections of code. Instructions
to the preprocessor are proceeded by a #, e.g. #include The #include directive tells the
preprocessorto treat the contents of a
specified file as if those contents had appeared in the source program at the
point where the directive appears. Usually this is used to reference the header
files of libraries, for example iostream.h, which consist of a series of
prototypes, one for each function supported by the library. By including the
header file the compiler will recognise the functions called later within the
source file, checking that they are being used correctly. To indicate to the
preprocessor where the filename starts and ends <…> are employed, with < marking the start and > the
end, for example #include
<iostream.h>. The #definedirective permits meaningful names
to be assigned to constants in your program. For example, the statements #define RED 2 and #define BLUE 3 permit the programmer to use the terms RED and BLUE freely throughout the source code wherever the values 2 or 3 are expected. When the preprocessor parses the source file
all occurrences of the name are replaced with their value (i.e. all instances
of RED become 2). Declare variables
of an appropriate data type
There are
two fundamental data types in C++, real for numeric values with decimal
parts and integral for whole numbers and characters. Examples of
reals include, float and double,with the type
determining the number of bytes used to hold the variable and thus the
precision and range of values the variable can hold. The actual number of bytes
used depends on the computer system. Values used in complicated calculations
that must be exact to several decimal places, such as 12.4736, are stored in
variables of type float. Note, it is entirely possible to
store whole numbers, such as 12.0, in floats. A float declaration would appear
as: float
fNumbmer; Integrals
include int, char, and long again with the type determining the
number of bytes used to hold the variable. The actual number of bytes used
depends on the computer system, except for variables of type char which always hold 1 byte.
Characters, for example ‘a’, are stored in variables of type char, while integers, such as 47, are
held in int variables. Declaration of integers
and characters appear as: int
iNumber; char
cCharacter; The
following code fragment illustrates the use of variables. First the source code
allocates two areas of memory to hold integer values: int
iFirstNumber; int
iSecondNumber; Next, the
fist variable is assigned the value 17. Then the contents of the first variable
are copied to the second: iFirstNumber
= 17; iSecondNumber
= iFirstNumber; which has
the effect of allocating the value 17 to both variables. Within
programs it is often necessary to refer to constant (or literal) values, such
as p or the name of a person. Unlike
variables, constants can not be changed by the operation of a program - they
are fixed until the source code is changed and re-compiled. For example, the
following code fragment sets the variable fDiameter to fRadius multiplied by
3.142. No matter what value is contained in fRadius the program will always use
a multiplier of 3.142, the only way to change this is to modify the source code
and recompile the program. float fDiameter; float fRadius; … fDiameter = 3.142 * fRadius Besides including real values, such as 3.142, in
source code it is possible to declare variables as constants through the const keyword. Such variables are assigned a value at
creation, but can not be changed later, for example: float fDiameter; const float fPi = 3.142; float
fRadius; … fDiameter
= fPi * fRadius When
writing programs it is often necessary to handle characters and strings. A char is a single byte used to store a
numeric representation of a character, for example the character ‘A’ would be stored in the variable as
65, B as 66, etc. The following code declares a character variable and loads it
with the letter ‘A’: char
cCharacter; cCharacter
= ‘A’; Note that
the variable is assigned the value ‘A’, letters in ‘’ are treated as characters. It is
not permissible to have more than one character between ‘’. A string is
a sequence of characters, for example “Rosetta”. C++ does not provide a specific data type to hold strings,
instead an array of chars is employed, an array being a
series of contiguous memory locations. Arrays can exist for any data type and
are denoted by [x], where x is the number of items to store in the array. The following
code declares an array of 10 characters and loads it with some text, note strcpy is a function provided by string.h: #include
<string.h> … char
cCharacters [10]; strcpy
(cCharacters, “Rosetta”); In the
example above the function strcpy copies the contents of a string literal (“Rosetta”) to a string variable (cCharacters). The double quotes indicate to the
compiler that a string is being referenced (remember, single quotes indicate a
single character). Write and use
functions
All
executable code within C++ programs are contained within functions. Even the
simplest programs, as outlined above, contain at least one function called main ().The main function is the entry point to all
C++ programs, but is not supplied by the compiler - a developer must provide
it. A function
is typically a short piece of named code (sometimes referred to as a routine)
which performs a simple, well defined action such as taking two numbers,
multiplying them together and returning the result to the calling code.
Functions may call other functions (or even themselves) but may not contain the
definitions of other functions within themselves. All
functions, other than main
(), must be known to
the compiler before they are used within a source file. Unfortunately this is
not always possible, either because you do not have access to the source code
which defines the function (as in the case of library functions) or because you
do not wish to place the function before it is first used within a file. To
solve this problem C++ permits the use of function prototypes. A
function prototype describes the function to the compiler, but does not
actually provide the implementation - it is an indication of what is to follow.
Note, when including header files for libraries (e.g. iostream.h) the developer is providing a
number of function prototypes (they are contained by the header file, the
preprocessor expanding them into the source file). Supposing
we have a function that displays a message on the screen. The function takes no
parameters and returns no value, its prototype would thus be: void
vDisplayMessage (); The ; immediately after the closing
bracket indicates that this is a prototype. If there was an opening { then this would be the start of the
function definition itself and not just a prototype. Over time
the requirements of vDisplayMessage change, it must now be capable of taking a parameter
(in this case a number). This number will indicate which message to display (1
for “hello”, 2 for “goodbye”). The function prototype changes to: void
vDisplayMessage (int iMessageNumber); If the
function prototype and definition are modified, but uses of it with the program
are not changed, the compiler will generate compilation errors until the usage
matches the definition. |
|
||
|
|||
|
Last updated: 11th July 2006. copyright © 2006 Greystoke Systems Ltd. Web address: http://www.gsys.biz/Documents/Services/Tuition/CityAndGuilds/7261-229/ComponentsOfASourceFile.htm |