Hello! This is the C2S2 C/C++ training - it should give you a working knowledge of how to use C and C++, as well as understanding some of the advanced capabilities that they have. By the end, you should be comfortable programming in C and C++, as well as understanding how we would set up such a project. This training is designed for all learners; whether new to programming or coming from some programming background, you should be able to get something out of it. The training is laid out below in different steps; they are best done in order, as each relies on previous concepts in order to understand. Book 1 is basic concepts, and is written for C. Book 2 moves to C++, and includes some of the advanced concepts and functionality that C++ brings.
Note that this training is not meant to give instruction on programming techniques, such as data structures and algorithms, but rather a somewhat comprehensive training of how to operate within C/C++
Prerequisites:
- Basic familiarity with your terminal of choice (how to navigate, run commands, etc.).
- A code editor of your choice
- A GitHub profile with SSH keys set up for your machine (see here - the same concepts apply even if you're doing it locally, you may just have to generate your own SSH keys; just click Enter for all of the prompts to leave them blank)
Preface: Setting Up Your Environment
"C is quirky, flawed, and an enormous success" - Dennis Ritchie, inventor of C
Book 1: Our Programs are Born (...through a C section)
- Chapter 0: Hello, World!
- Chapter 1: Basic Variables and Operations
- Chapter 2: Blocks and Functions
- Chapter 3: Conditionals and Loops
- Chapter 4: Header Files and Project Structure
- Chapter 5: Bitwise Representations and the Danger of Overflow
- Chapter 6: Advanced and User-Defined Types
- Chapter 7: Pointers
- Chapter 8: Arrays
- Chapter 9: Dynamic Memory Management
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off" - Bjarne Stroustrup, inventor of C++
Book 2: Becoming less C-rious (Transitioning to C++)
- Chapter 10: Making the Jump from C to C++
- Chapter 11: Object-Oriented Programming
- Chapter 12: Inheritance
Polymorphism:
Functional Programming:
Concurrent Programming:
Appendices
These appendix modules don't have any formal prerequisites (can be completed nominally at any time throughout the training, although some recommendations are included), and are included as extra information to round out your knowledge of how to work with C/C++
Other Resources
These are some other resources that may help you in your journey to becoming a C/C++ programmer
- Replit.com (formerly repl.it)
- This is an online, browser-based IDE and compiler, allowing you to quickly sketch up sample programs and test them without worrying about a large build structure
- Godbolt.org
- This is a "compiler explorer" - it helps you examine how your code is compiled for different ISA's and with different compilers
Disclaimer: This training is heavily inspired by the handouts from Cornell's ECE 2400. It is to only be used for non-commercial, educational purposes.