Transcript Document

C++ Program Structure (and tools)

Today we

ll talk generally about C++ development (plus a few platform specifics)

• We ’ ll develop, submit, and grade code in Windows • It ’ s also helpful to become familiar with Linux – E.g., on shell.cec.wustl.edu

• For example, running code through two different compilers can catch a lot more “ easy to make ” errors CSE 332: C++ program structure and development environment

Writing a C++ Program

Visual Studio Eclipse emacs editor Makefile (ASCII text) 1 source file = 1 compilation unit C++ source files (ASCII text) .cpp

Also: .C .cxx .cc

Programmer (you) Also: .H .hxx .hpp

readme (ASCII text) C++ header files (ASCII text) .h

CSE 332: C++ program structure and development environment

What Goes Into a C++ Program?

• Declarations: data types, function signatures, classes – Allows the compiler to check for type safety, correct syntax – Usually kept in “ header ” (.h) files – Included as needed by other files (to keep compiler happy)

class Simple { typedef unsigned int UINT32; public: Simple (int i); int usage (char * program_name); void print_i (); private: struct Point2D { int i_; double x_; }; double y_; };

• Definitions: static variable initialization, function implementation – The part that turns into an executable program – Usually kept in “ source ” (.cpp) files

void Simple::print_i () { cout <<

i_ is

<< i_ << endl; }

• Directives: tell compiler (or precompiler) to do something – More on this later CSE 332: C++ program structure and development environment

A Very Simple C++ Program

#include // precompiler directive using namespace std; // compiler directive // definition of function named

main

int main (int, char *[]) { cout <<

hello, world!

return 0; << endl; }

CSE 332: C++ program structure and development environment

What is

#include

?

• #include tells the precompiler to include a file • Usually, we include header files

– Contain

declarations

of structs, classes, functions

• Sometimes we include template

definitions

– Varies from compiler to compiler – Advanced topic we ’ ll cover later in the semester

is the C++ label for a standard header file for input and output streams

CSE 332: C++ program structure and development environment

What is

using namespace std;

?

• The

using

directive tells the compiler to include code from libraries that have separate

namespaces

– Similar idea to “ packages ” in other languages • C++ provides a namespace for its standard library – Called the “ standard namespace ” (written as std ) – cout, cin, and cerr standard iostreams, and much more • Namespaces reduce collisions between symbols – Rely on the

::

scoping operator to match symbols to them – If another library with namespace mylib defined

cout

could say

std::cout vs. mylib::cout

we • Can also apply

using

more selectively: –

E.g.,

just

using std::cout

CSE 332: C++ program structure and development environment

What is

int main (int, char*[]) { ... }

?

Defines

the main function of any C++ program • Who calls main?

– The runtime environment, specifically a function often called something like

crt0

or

crtexe

• What about the stuff in parentheses?

– A list of types of the input arguments to function main – With the function name, makes up its

signature

– Since this version of main ignores any inputs, we leave off names of the input variables, and only give their types • What about the stuff in braces?

– It ’ s the

body

of function main, its

definition

CSE 332: C++ program structure and development environment

What

s

cout <<

hello, world!

<< endl;

?

• Uses the standard output iostream, named

cout

– For standard input, use

cin

– For standard error, use

cerr

• •

<<

is an operator for

inserting

into the stream – A member

operator

of the ostream class – Returns a

reference

to stream on which its called – Can be applied repeatedly to references left-to-right “

hello, world!

” is a C-style string – A 14-postion character

array

terminated by ‘

\0

’ •

endl

– Also is an iostream manipulator – Ends the line, by inserting end-of-line character(s)

flushes

the stream CSE 332: C++ program structure and development environment

What about return 0; ?

• The main function should return an integer

– By convention it should return 0 for success – And a non-zero value to indicate failure

• The program should not exit any other way

– Letting an exception propagate uncaught – Dividing by zero – Dereferencing a null pointer – Accessing memory not owned by the program • Indexing an array “ out of range ” can do this • Dereferencing a “ stray ” pointer can do this CSE 332: C++ program structure and development environment

A Slightly Bigger C++ Program

#include using namespace std; int main (int argc, char * argv[]) { for (int i = 0; i < argc; ++i) { cout << argv[i] << endl; } return 0; }

CSE 332: C++ program structure and development environment

int argc, char * argv[]

• A way to affect the program

s behavior

– Carry parameters with which program was called – Passed as parameters to

main

from

crt0

• – Passed by value (we ’ ll discuss what that means)

argc

• – An integer with the number of parameters (>=1)

argv

– An array of

pointers

to C-style character strings – Its array-length is the value stored in

argc

– The name of the program is kept in

argv[0]

CSE 332: C++ program structure and development environment

for (int i = 0; i < argc; ++i)

• Standard (basic) C++ for loop syntax – Initialization statement done once at start of loop – Test expression done before running each time – Expression to increment after running each time •

int i = 0

– Declares integer i (scope is the loop itself) – Initializes i to hold value 0 (

not

an assignment!) • •

i < argc

– Tests whether or not we ’ re still inside the array!

– Reading/writing memory we don ’ t own can crash the program (if we ’ re really lucky!)

++i

– increments the array position (why prefix?) CSE 332: C++ program structure and development environment

{cout << argv[i] << endl;}

• Body of the for loop • I strongly prefer to use braces with for, if, while, etc., even w/ single-statement body

– Avoids maintenance errors when adding/modifying code – Ensures semantics/indentation say same thing •

argv[i]

– An example of array

indexing

– Specifies ith position from start of argv CSE 332: C++ program structure and development environment

Lifecycle of a C++ Program

xterm window console/terminal/window An “ IDE ” Makefile WebCAT make “ make ” utility turnin/checkin E-mail Runtime/utility libraries (binary) .lib .a .dll .so

Eclipse Programmer (you) C++ source code Visual Studio debugger

precompiler compiler

gcc, etc.

compiler link linker executable program object code (binary, one per compilation unit) .o

CSE 332: C++ program structure and development environment

Development Environment Studio

• We ’ ll follow a similar format most days in the course – Around 30 minutes of lecture and discussion – Then about 60 minutes of studio time – Except for open studio/lab days, reviews before the midterm and final, and the day of the midterm itself • In the studios, please work in groups of 2 or 3 – Exercises are posted on the course web page – Record your answers to the exercises, and e-mail your answers to the course account when you ’ re done – We’ll migrate throughout the studio to answer questions • Use studio time to develop skills and understanding – A good chance to explore ideas you can use for the labs – Exams will test understanding of the studio material – You ’ re encouraged to try variations beyond the exercises CSE 332: C++ program structure and development environment