C and C++ original source code goes through a number of steps on its way to becoming a runnable program.
1. The C Preprocessor is run on the original source. This takes the source lines that start with a # character and acts on them as directed. (It does a bit more too - more about that anon!)
2. The C / C++ compiler takes the source code as modified by the preprocessor and converts it into a section of object code. That's the instructions for actually running on the target computer's processor, although not actually in a runnable form yet.
3. The Link loader / Task Builder then takes a whole set of object code files - both te ones written by you (the programmer) and others from standard libraries, and couples them up into a single executable file. Some of the standard stuff may not actually be copied into the executable; that executable may just include a note of where it may be found at run time.
4. At run time, the executable file is loaded into memory and run; part of that loading may be changing the memory addresses that the program runs at (on a multiprocess computer, there's no way at build time of knowing what else will be running at the same time), and pulling in code from the libraries which may have just been 'earmarked' at stage 3.
The directives at stage 1 may include:
#include - to bring in another text file at this point
#define - to define a flag or string for replacement in this phase
#ifdef - to mark the following code to be included in the output source ONLY if a specific flag variable / string has been defined
#ifndef - to mark the following code to be included in the output source ONLY if a specific flag variable / string has NOT been defined
#endif - to mark the end of a conditional inclusion block started by #ifdef or #ifndef
There's an example showing the uses of these
[here] in a short C program from last week's
C Course, and you'll also find them extensively used in C++ to bring in header files into main application programs (see
[example]) ... and then within the header files of the classes to bring in the header files of the classes on which they are based (See
[example]). You'll notice the use of defined preprocessor constants in this example to ensure that headers aren't double defined ... in the pet.h header file you'll find you have:
#ifndef PET
#define PET 1
definition lines
#endif (written 2011-04-12)
22d7
Associated topics are indexed under
C211 - C and C based languages - Standard Libraries and other headers [3234] Your program - you just provide the filling in the sandwich - (2011-04-08)
[3148] OpenGL / C / C++ - an example to get you started - (2011-01-26)
[2575] Sharing variables between files of code in C - extern - (2010-01-14)
C233 - C and C based languages - OO in C++ - beyond the basics [3979] Extended and Associated objects - what is the difference - C++ example - (2013-01-18)
[3811] Associated Classes - using objects of one class within another - (2012-07-21)
[3508] Destructor methods in C++ - a primer - (2011-11-05)
[3251] C++ - objects that are based on other objects, saving coding and adding robustness - (2011-04-17)
[3142] Private and Public - and things between - (2011-01-22)
[3124] C++ - putting the language elements together into a program - (2011-01-08)
[3123] C++ objects - some short, single file demonstrations - (2011-01-07)
[3056] C++ - a complete example with polymorphism, and how to split it into project files - (2010-11-16)
[2845] Objects and Inheritance in C++ - an easy start - (2010-07-01)
[2577] Complete teaching example - C++, inheritance, polymorphism - (2010-01-15)
[1819] Calling base class constructors - (2008-10-03)
[1674] What a lot of files! (C++ / Polymorphism demo) - (2008-06-12)
[1572] C - structs and unions, C++ classes and polymorphism - (2008-03-13)
[1217] What are factory and singleton classes? - (2007-06-04)
[925] C++ - just beyond the basics. More you can do - (2006-11-14)
[831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
[801] Simple polymorphism example - C++ - (2006-07-14)
[798] References and Pointers in C++ - (2006-07-10)
Some other Articles
What have these pictures in common?Light and dark at Green ParkMelksham - the way forward. 26th April, Well House ManorCollections in C and C++ - arrays, vectors and heap memory blocksC and C++ - preprocess, compile, load, run - what each step is forBreaking the running sequence - an introduction to conditional statements and loopsHow to return 2 values from a function (C++ and C) - more uses of pointersSpring in the countryside near MelkshamMelksham Town Council - vacancy in the Spa WardTrainWest, 2011 in pictures - Christie Miller, Bowerhill, Melksham