
Explore a new toolset for creating and compiling C and C++ applications across platforms, including make files, the C++ compiler, and graphical and console debugging tools.
Explore GNU make fundamentals and Makefiles, cross-platform workflows on Windows and POSIX systems, and build simple C++ programs while managing libraries, installation, testing, and execution.
Explore the GNU make workflow, including targets, dependencies, and rules, and learn how dates and time stamps trigger builds across POSIX, Unix, Linux, and Windows environments.
Explore how make and makefiles manage targets, dependencies, and rules to build a C++ application, using macros, a cc line, and a tabbed command syntax for reliable builds.
Review how the make process compiles main.cpp to main.o, links with libraries to form an executable, and uses the -o option to name it main.run while tracking dependencies.
Explore how Makefiles execute shell commands across POSIX and Windows environments, using bash-like operators, built-in commands, and return codes to control builds.
Master advanced gnu c++ command options, including -c or -o for compilation and output, -g for debugging, -I and -L for search paths, and -l for linking libraries.
Learn how to read and use makefiles with targets like all, clean, and install, guided by the era namespace project and its library-less object linking, plus cross-platform notes.
Learn how to create libraries using makefiles and the ar archiver, combine object files into static (.a) and dynamic (.so) archives, and link them to applications for efficient sharing.
Learn to enable debugging symbols with -g, use gdb or x gdb (GDP) for graphical debugging, set breakpoints, inspect stack frames, print variables, and navigate frames.
Enable debugging with GNU make by adding the g option to include symbols for gdb, then run tests, set breakpoints, inspect variables, and control execution with continue, next, and finish.
An intermediate C and C++ training overview that blends legacy concepts with modern C++, covering data types, structures, classes, encapsulation, polymorphism, and practical tooling for robotics-focused projects.
Explore the paradigm shift of object-oriented programming, from spaghetti code to self-documenting objects that model a problem domain, and learn refactoring, naming conventions, and C/C++ standards.
Explore the evolution of C++ from 98 through 11 and 14 toward future standards, emphasize recompilation, template and library changes, and the role of UML diagrams in requirements elicitation.
Set up the GNU C/C++ study environment on Windows with cygwin, download and extract study 1000, and explore generations of C++ using stdio.h, C standard IO, and iostream with namespaces.
Review the GNU toolchain from the command line through preprocessor, compiler, and linker stages, and learn how symbols and debugging with gdb fit into building portable C/C++ code.
Explore environment variables and PATH influence header search and make files behavior across Windows and POSIX. Recognize portability risks, include path nuances, and importance of readme notes documenting environment dependencies.
Explore the GNU c/c++ toolchain and code creation, from ascii editors and internationalization issues to main signatures, code and data segments, and return value optimization.
Explore the C++ toolchain from ascii editor to preprocessor, compiler, linker, and executable, then learn to build projects with makefiles, lab solutions, and open source code on GitHub.
Use g++ -g to include symbols, then debug by disassembling main and inspecting stack parameters and printf calls, while exploring name mangling and demangling.
Learn forward declarations and how headers versus implementations organize code in C++. Use headers as a calling card to enable encapsulation, data hiding, and namespace separation.
Create a common header named unify to centralize system header inclusions, enforce a consistent include order, and prevent bugs from multiple inclusions. Use a unique gatekeeper macro for single-point updates across files.
Update your solution quickly in about five minutes by retrieving what you need from the provided file and the tool, then simply update it.
Explore exception management in C++ using try, catch, and throw to handle errors, prevent crashes, and take corrective actions when operations fail.
Explore preprocessor concepts in C/C++, including macros, undefining, and conditional compilation, plus diagnostics with __FILE__, __LINE__, __DATE__, and __TIME__ to aid debugging across devices and applications.
Explore macros and inline functions in c/c++: use define and preprocessor tricks, compare inline expansion to function calls, and understand when copying code is more efficient than parameterized calls.
Explore how references act as syntactic sugar that converts to pointers, ensuring valid targets and enabling safe passing, overloading, and polymorphism through name mangling.
Learn how default parameters let functions be called with fewer arguments, test their behavior, and use overloading and name mangling to select among multiple parameter signatures.
Revisit overloading in C++ by examining stack versus heap allocation and the role of new. Explore return value optimization, references, and printf formatting.
Namespaces prevent collisions and ambiguity by qualifying names like namespace::log, support multiple versions, and use using or typedef to map to the standard namespace and macros.
Explore how state machines and function pointers enable a programmable calculator, using typedefs to define interchangeable types and switch behaviors on the fly.
Explore how to implement finite state machines with function pointers and arrays in C++, using shared signatures, enums, and simple structures to manage states and transitions.
Review primitive data types and register sizes. Explain how strings are null-terminated character arrays and explore memory representation, plus a dumper program that prints values with format specifiers.
Explore cross-platform data types and character sizes, comparing signed and unsigned chars, wchar_t sizes, and how bit patterns affect value interpretation across compilers and platforms.
Review logical data types in C/C++ and bool keyword, noting obsolescence of all-uppercase macros. Explain shortcut operator behavior and its effect on function calls and boolean to integer promotion.
Explore integer data type sizes across architectures, and learn about l value and r value, modulus and other operators in C and C++.
Review arrays and strings in C and C++, examine null-terminated strings and various termination conventions, and learn how pointers, array sizes, and argv influence memory and command-line limits.
Explore string and array activity: how name mangling forces const char* in puts, why non-const pointers trigger warnings or compile errors, and how C++98/03 differ from C++11/14 in legacy code.
Trace the shift from C strings to the modern C++ standard library, covering IO streams, the Boost effort, and the string class, and examine buffer handling and safety concerns.
Learn to manage uninitialized buffers in C and C++ using memset, zero-filled buffers, and string classes, while embracing locale-aware I/O and evolving C++ standards and headers.
Explore the migration from c standard input and standard output to c++ streams, using cin, cout, and getline with string, and learn about operator overloading and its potential pitfalls.
Explore C++ stream-based I/O with encapsulated operations, including ofstream and ifstream, text and binary modes, and operator<< overloading, to read, write, seek, and flush data efficiently.
Learn to view streams as a framework that reads, writes, and formats bytes across devices, and design signature-based classes with typedefs to support multiple string implementations and operator overloads.
Examine how a C++ struct mirrors a class, with default public visibility, and how a function pointer inside a struct can yield a class while wrapping legacy C types.
Explore C++ classes and structs, understand public, private, and protected access, and distinguish mutators and accessors within a practical API wrapper that enforces a stable public contract.
Design frameworks and object relationships in C++ with public, protected, private, and friend access, while implementing a shopping cart total data class through mutators, accessors, and overloaded getters.
Explore how the this pointer operates with dynamic memory, highlighting pointers, namespaces, and encapsulation, and how to manage multiple mains with a makefile for C/C++ projects.
This lecture explains how C++ standard versions affect code, showing non-static data member initializers and the role of constructors in initializing objects across standards.
Explore static initialization with inside or outside the class constants, uppercase naming, and preprocessor options for backward-compatible C++11/14 code, typically using the constructor.
Explore object factories and polymorphism in C++, using user data, web shopper, and employee. Override balance with virtual functions to adapt price across roles.
Explore inheritance strategies by examining base classes, parent classes, protected access, and how default parameters and a multiplier flow through derived classes using static_cast and dynamic_cast.
Explore object factories in C++, using a factory to create polymorphic objects via pointers, dynamic_cast and static_cast, and manage lifetimes with new and delete, avoiding memory leaks with smart pointers.
Explore C++ memory management, including dynamic allocation and proper pairing of new and delete. Learn to use delete[] for arrays to prevent memory leaks.
Learn polymorphic factories in c++, creating a web shopper with a factory pointer that returns a web shop pointer, sets multipliers, retrieves balance, and handles memory with delete and casts.
Explore the object lifecycle in C++ as you learn how constructors initialize objects, copy constructors and destructors manage lifetimes, and operator= with inheritance and stack allocation.
Explore scope and visibility in c++ by tailoring public, protected, and private access, using dynamic_cast, a factory, and constructors, and updating tests with copy and value constructors and accessors.
Learn how to modernize legacy C++ code by blending old and new techniques with fstream, getline, and standard algorithms, while counting lines and using io streams.
Learn to implement robust file logging in C and C++ by opening or creating log files, appending data, flushing to disk, and handling time values and locales.
Learn to implement a safe api wrapper around POSIX time structures, using global namespace access, const correctness, and defensive coding to shield users from implementation details.
Explore implementing an easy log using Julian days, string stream, and local time, showcasing auto type conversion, copy constructors, RVO, and test-driven development.
Build and run the lab solution in C++ with a makefile, targeting the act_easy_log program. Use the compiler flag to include headers from the headers directory.
C/C++ 2000: GNU For Intermediate Students will review the key language-centric concepts modern C/C++ professionals will need to be aware of. Building upon the concepts presented in GNU C/C++ 1000, students should be familiar with the complete keyword set as presently defined by the modern standard for C programmers.
Classics Matter!
Writing C/C++ for decades I believe students need to also know how to work with those huge legacy code bases? Never soon to be updated, if it isn't broken then we should understand why many will want us to work with those classic standards!
Rollings Review
If C and / or C++ are new to you, we start our with a review of the core concepts. I think you'll appreciate the review, as well as the additional extended topics that we're going to be presenting in this 2000 level - or intermediate C/C++ educational opportunity. If you are familiar with C and basic C++ then you will also feel confident jumping right into this intermediate, 2000 level, lesson set.
Note also that we will be talking about a state machine and revisiting many concepts that were presented in the C/C++ 1000 series.
Additional Learning 'Ops
The reason why I like to present a concept more than once and in several different ways is as to make sure people understand the key concepts that are required for topical mastery. No practice, no glory?
So I hope you'll enjoy the review and if you didn't take C++ 1000 you might want to enroll in the beginning programming lessons as well.