Presentation is loading. Please wait.

Presentation is loading. Please wait.

Fall 2015CISC/CMPE320 - Prof. McLeod1 CISC/CMPE320 Reminders: Course Web Site: Have you filled out the questionnaire.

Similar presentations


Presentation on theme: "Fall 2015CISC/CMPE320 - Prof. McLeod1 CISC/CMPE320 Reminders: Course Web Site: Have you filled out the questionnaire."— Presentation transcript:

1 Fall 2015CISC/CMPE320 - Prof. McLeod1 CISC/CMPE320 Reminders: Course Web Site: http://research.cs.queensu.ca/home/cisc320 Have you filled out the questionnaire in Moodle? (39 left – as of last night). Are you able to run a C++ console program in your IDE of choice? Today: –“Hello World” Ritual –Some history of C++

2 Demo - “Hello World” in C++ For simple console demos I’m going to use the Eclipse CDT. A few notes: –Make sure your project has the proper “Includes” links. –You should provide the extension “.cpp” for a source code file, or “.h” for a header, or declaration file. –Suggest that you turn off automatic building. (Off by default…) –But, don’t forget to save, then build before you run. Fall 2015CISC/CMPE320 - Prof. McLeod2

3 Fall 2015CISC/CMPE320 - Prof. McLeod3 Some Explanation #include is a preprocessor directive that is used to include external code into your program. iostream is a library of I/O streams (makes sense!). A namespace is a collection of name definitions. (The same name can be used in separate namespaces). using namespace std; says that your program is using names from the std (or “standard”) namespace. Another way to do this is to use the :: “scope resolution operator”, as in std::cout (but this gets to be a pain of you are using a lot of names…)

4 Fall 2015CISC/CMPE320 - Prof. McLeod4 Some Explanation, Cont. int main() is a function header. Code within the function is contained between { } cout is an object from the iostream library that represents the console output stream. << is the “insertion operator” and is used to insert the supplied string literal into the cout object. endl stands in for a line feed character. In ISO C++ the return 0; is supposed to be optional, but some older compilers still require it.

5 Fall 2015CISC/CMPE320 - Prof. McLeod5 Some More Explanation… Note that older style C libraries still use the “.h” extension, as in stdio.h. The newer library uses cstdio instead. Sometimes you just don’t know, so you have to experiment. For example, from the STL, you could try: –Vector –vector.h –vector One of them should work! I will always try to use the latest library names.

6 Aside:How to Run C++11 Code in Eclipse Assuming the MinGW (or GCC) compiler. To change for just a project: C/C++ Build -> Settings -> Tool Settings -> GCC C++ Compiler -> Miscellaneous -> Other Flags. Put “-std=c++11” at the end (after a space). Click on “Apply” after the change. Fall 2015CISC/CMPE320 - Prof. McLeod6

7 Fall 2015CISC/CMPE320 - Prof. McLeod7 History of C++ In the beginning there was C… Not really, but let’s not go back too far…

8 Fall 2015CISC/CMPE320 - Prof. McLeod8 History of C++ - BCPL 1966 is before you were born, so let’s start there: BCPL or “Basic Computer Programming Language” designed by Martin Richards of the University of Cambridge. Used to write compilers. It was the first language that created “O-code” before executable code:

9 Fall 2015CISC/CMPE320 - Prof. McLeod9 Aside – “O-Code” BCPL Source Code Machine Code Virtual Machine Compiler O-Code CPU Java Source Code Machine Code JVM Compiler Byte Code CPU Generic Hardware Dependent

10 Fall 2015CISC/CMPE320 - Prof. McLeod10 “O-Code”, Cont. Before BCPL, when they wanted to run on a new platform, the entire compiler program had to be re-written (took 5 man-months…). Now only the part (about 1/5 of the total code) that generated the machine code – the “Virtual Machine” had to be changed, the part that generated the generic O-Code did not have to change. Radical Idea! (Also the first language to use { } and // for comments.)

11 Fall 2015CISC/CMPE320 - Prof. McLeod11 B Written at Bell Labs by Ken Thompson with contributions by Dennis Ritchie. First appeared in 1969. Stripped down version of BCPL to run on “minicomputers” like the DEC PDP-11. Had a single data type, the “word” that was an integer most of the time, but could also be a memory reference. Gradually evolved into C in the early 70’s.

12 Ken Thompson (seated) and Dennis Ritchie working on a DEC PDP11 in 1970: They also invented the UNIX OS. (The PDP11 was a 16 bit machine.) Fall 2015CISC/CMPE320 - Prof. McLeod12

13 Fall 2015CISC/CMPE320 - Prof. McLeod13 C Dennis Ritchie, of Bell Labs, is given credit for C in 1972. A procedural language used for systems programming (compilers for example) and for embedded systems. Gives low level access to memory and efficient translation to machine code. No longer have to code in Assembly language! Used on any kind of computer during the late 70’s and early 80’s including the IBM-PC. In 1983 the language was standardized by ANSI, giving birth to “ANSI C”, also called “C89”.

14 Fall 2015CISC/CMPE320 - Prof. McLeod14 C With Classes Was developed by Bjarne Stroustrup at Bell Labs starting in 1979, as an enhancement to C. Added to C: –classes –virtual functions –operator overloading –multiple inheritance –templates –exception handling, etc. In 1983 the name of the language was changed to C++ (the increment operator…).

15 Fall 2015CISC/CMPE320 - Prof. McLeod15 C++ Standards It took a long time, but the language was first standardized in 1998 by ISO. The standard was updated in 2003 and amended in 2005 (310 pages, without the library!). Another standard was completed in 2011: “C++11” (August 12, 2011, 1338 pages!). C++14 came out on August 18, 2014. A smaller set of changes from C++11. Work is underway on C++17.

16 C++ Standards, Cont. But: It takes a while (and a considerable amount of work) to update compilers to the new standards. See: http://en.cppreference.com/w/cpp/compiler_support for a summary of how various compilers are doing. GCC version 4.8.1 is now up-to-date with C++11. Visual Studio is almost as good and Clang is also up-to-date with C++11. Fall 2015CISC/CMPE320 - Prof. McLeod16

17 C++ Standards, Cont. Compilation is *not* standardized, just the syntax. How does Java compare, for example? Fall 2015CISC/CMPE320 - Prof. McLeod17

18 Fall 2015CISC/CMPE320 - Prof. McLeod18 The “Philosophy” of C++ From “The Design and Evolution of C++” by (who else!) Bjarne Stroustrup, 1994: C++ is designed to be a statically typed, general- purpose language that is as efficient and portable as C. C++ is designed to directly and comprehensively support multiple programming styles (procedural programming, data abstraction, object-oriented programming, and generic programming). C++ is designed to give the programmer choice, even if this makes it possible for the programmer to choose incorrectly.

19 Fall 2015CISC/CMPE320 - Prof. McLeod19 The “Philosophy” of C++, Cont. C++ is designed to be as compatible with C as possible, therefore providing a smooth transition from C. C++ avoids features that are platform specific or not general purpose. C++ does not incur overhead for features that are not used (the "zero-overhead principle"). C++ is designed to function without a sophisticated programming environment.

20 Fall 2015CISC/CMPE320 - Prof. McLeod20 ISO C++ and C The C++ standard library has incorporated the standard C library with just a few optimizations. C++ also has the “Standard Template Library”, or “STL”, that contains many pre-defined data structures, for example. Generally, well-written C code will run in C++. But some C “things” will not work in C++ (for example, in C you can use new or class as variable names, since they are not C keywords.)

21 Fall 2015CISC/CMPE320 - Prof. McLeod21 Running a C++ Program Source Code, *.cpp, *.h Machine Code, *.exe Linker Compiler O-Code, *.o CPU Library Code Source Code Editor

22 Running a C++ Program, Cont. Thankfully, an IDE simplifies this process for you. A project (a set of source code and resource files) is “built” – which consists of both compilation and linking. MinGW (“Minimalist GNU for Windows”), for example uses the g++.exe program for this. The IDE makes up the command line calls to this program. Building creates a *.o file and then a *.exe file. Then you run the *.exe program. Each stage of this process can unearth errors. Fall 2015CISC/CMPE320 - Prof. McLeod22

23 Who Reports the Errors? An Eclipse pre-compiler does a pretty good job of reporting syntax errors and warnings. Errors may prevent building. You can (but should not!) ignore warnings. Build errors are reported by the compiler and are seen in the console window. Run-time errors are reported by the OS, which is running the *.exe file. Fall 2015CISC/CMPE320 - Prof. McLeod23

24 Variable Types How many variable types do you have in C? (not counting structs)? You can have the atomic types, pointers and arrays of these types. Anything else? How many types can you have in C++? Infinitely many! Thousands defined in the STL. You can define as many as you want. Oh – the atomic types are still there too… Fall 2015CISC/CMPE320 - Prof. McLeod24

25 Fall 2015CISC/CMPE320 - Prof. McLeod25 Variable Declaration C++ is declarative and statically typed. ie. “Declare before you use” and “You can’t change the type of a variable, once declared”. Unlike C, you can declare variables anywhere, as long as you satisfy the above. Initialization is good practice, but is optional. Examples: int numStudents(40); // C++ style declare bool flagVal(true); double aNum;

26 Variable Declaration, Cont. This is what we are used to from Java: int numStudents = 40; bool flagVal = true; For a C++ “style” declaration, use: int numStudents(40); bool flagVal(true); Looks like you are invoking a constructor doesn’t it? Fall 2015CISC/CMPE320 - Prof. McLeod26

27 Fall 2015CISC/CMPE320 - Prof. McLeod27 Type Categories in C++ Fundamental types: –bool, char, integer types and floating point types Enumerated types. The void type. Pointer types (like int* ) Array types (like int[] ) Reference types (like int& ) Data structures (like vector ) and classes

28 Fall 2015CISC/CMPE320 - Prof. McLeod28 bool and char Types bool literal values: true and false char literal values: 'H' Escape characters: –\n newline –\t tab –\b backspace –\r carriage return –\a BEL –\? ? –\\ \ –\' ' –\" " –\0 ##octal –\x ##hex

29 Fall 2015CISC/CMPE320 - Prof. McLeod29 Integer Types Simplify things a bit (forget unsigned …): –short 2 bytes –int 4 bytes –long 4 bytes –long long 8 bytes To get a long long literal append an l or better yet, an L to the end of the number. What is “unsigned” anyways?

30 Fall 2015CISC/CMPE320 - Prof. McLeod30 Floating Point Types float 4 bytes double 8 bytes long double 12 bytes Literal floating point numbers have a decimal place and/or an exponent: 4.5, 2.3e-7, for example. A float literal has an f or F appended to it. A long double gives you easy access to extended precision numbers.

31 Fall 2015CISC/CMPE320 - Prof. McLeod31 TestTypes Demo Your compiler will determine the amount of memory allocated to the numeric types. Use the sizeof() function to find out. Do integers wrap around as they do in Java? See the demo… Note that there is some variation on these types depending on the compiler you are using.

32 Fall 2015CISC/CMPE320 - Prof. McLeod32 Aside - Divide by Zero Example How does Eclipse/GCC handle a divide by zero? Check out TestZeroDivide.cpp. Note: compilation errors and warnings, run-time errors. Note that the run-time error results from the crashing of the executable, and is reported by the OS, not Eclipse. How does Java handle a divide by zero?


Download ppt "Fall 2015CISC/CMPE320 - Prof. McLeod1 CISC/CMPE320 Reminders: Course Web Site: Have you filled out the questionnaire."

Similar presentations


Ads by Google