
Advance your C programming with intermediate and advanced concepts, from storage classes and bit manipulation to data structures, inter-process communication, threading, and networking, to write modular code.
Explore the organization of the advanced C programming course, blending concept explanations, PowerPoint slides, hands-on code demonstrations in an ide, challenges with solution walkthroughs and downloadable source code.
Explore the C99 standard within the advanced course, highlighting new features like macros for variadic functions, _Complex and _Imaginary types, designated initializers, inline functions, and flexible and variable length arrays.
Explore the c11 standard, emphasizing multi-threading and safer libraries, including scanf_s. Learn about optional c99 elements, memory model improvements, and portable pthread usage.
Learn how to install the required C compiler and IDE across Windows, Mac, and Linux, including Cygwin on Windows, CodeLite, Xcode, and GCC, with OS-specific setup and configuration.
Install the GNU C compiler on Windows using Cygwin, include the make utility and GDB debugger, then set the path so gcc is accessible from any directory.
Install the code light integrated development environment on Windows after ensuring the C compiler is installed via Cygwin, using the latest 17.1 Windows 64-bit installer.
Configure CodeLite on Windows to work with the installed Cygwin GCC, set up a workspace and a console project, and build and run a simple C program.
Check your Mac for the C compiler, install Xcode or developer tools if needed, then use the terminal to check gcc --version and run a hello world test.
Install code lite on macOS by downloading OS ten Catalina tar.js app bundle from code lite.org, decompressing, moving to Applications, and opening anyway to code in C, C++, PHP, JavaScript.
Configure CodeLite on macOS by installing a compiler, navigating security prompts, running the setup wizard, creating a C/C++ workspace and project, and building and running with gcc and lldb.
Install the C++ compiler and build tools on Ubuntu 22.04, then install and configure CodeLite to work with the compiler.
Configure code lite on Ubuntu Linux with GCC, set up a C/C++ development profile, create a workspace and a project, and build and run the hello program.
Learn to create a default CodeLite project template to reuse C99 and static linking settings across new C projects. Save, name, and apply the template for quick project creation.
Learn to compile and run C programs from the command line interface using a simple text editor and a C compiler, without an ide.
Learn to compile and run a C program on Windows using the Cygwin terminal. Navigate with cd and ls, create source with a text editor, and build with gcc.
Use the Mac terminal to create a projects directory, navigate with cd and ls, write hello world.c in a text editor, then compile with gcc and run it.
Navigate Ubuntu's command line to create and edit C code with vi or gedit, then compile with gcc to produce and run a hello world program.
Discover how to write, compile, run, and debug C programs in a web browser using online editors and compilers, with command-line arguments and Online GDB, Tutorials Point, and Cs50 IDE.
Explore the CodeLite ide interface, manage workspaces and projects, and master editor features like line numbers, folding, and syntax highlighting for efficient c programming.
Create your first C program by writing a main function that includes stdio, reads a number with scanf, and prints it with printf after compiling the project.
Learn how to build and run a C program by compiling, linking, and creating a single executable, while managing dependencies, clean steps, and debugging versus release builds.
Modularize large C programs by using multiple source and header files, extern, and header guards to enable clear module communication and reuse.
compile multiple source files from the command line by listing mod1.c, mod2.c, and main.c, generate an executable with -o, and understand incremental compilation and common error messages.
Learn how make files automate compilation for large projects, tracking dependencies and header changes, and how gcc builds executables from src, obj, and prog using make.
Explore communication between C modules across files using function calls and prototypes. Learn extern and static for global data, and why compiler per-module compilation matters for modular design.
Use header files to group common functions and prototypes, standardize definitions across modules, and simplify maintenance by centralizing data structures like date in date.h.
Understand the stack and heap memory: the stack stores function-local variables with automatic deallocation, while the heap uses malloc and free for dynamic memory managed by the programmer.
Explore storage classes in C, focusing on auto variables as automatic local variables governed by block and function scope, visibility, and lifetime; learn memory conservation and local variable creation.
Discover how the extern storage class lets a global variable be defined in one file and accessed in others, and how to declare extern for functions or variables without redefinition.
Master the static storage class in C by applying it to local and global variables and functions, learning how it preserves values and restricts scope to a single file.
Learn how the register storage class hints the compiler to keep frequently used local variables in a register for speed, though the compiler may choose not to use it.
Explore C storage classes with three challenges: declare variables with block, file, and global scope; build a sum function with persistent state; and share a global across files.
Master the define statement, a preprocessor directive that creates symbolic constants substituted before the compiler, improving readability and portability with examples like null pointer and two pi.
Explore how typedef creates readable, maintainable aliases for existing C types, including pointers and arrays, and compare typedef with define for portable, clearer code.
Define array sizes at run time with variable length arrays driven by expressions, compare them to fixed arrays, and determine when to use malloc or realloc under c99/c11.
Read a user-specified size, allocate a variable length array, input the elements, and calculate their sum. Explore implementing variable length arrays in C and practice input handling and element summation.
Learn how to use flexible array members in c99: declare a last, variable-sized array in a struct, allocate memory with malloc, and understand practical restrictions and portability considerations.
Write a program that uses a flexible array member inside a struct, reads the size from the user, initializes length, allocates memory, fills with dummy data, and prints elements.
Explore complex numbers in c, introduced by the c99 standard, including double complex types, real and imaginary parts, and operations such as addition, subtraction, multiplication, division, and conjugate, via complex.h.
Explore complex numbers in c99 through complex calculations: i squared by multiplication, pow with the math library, Euler's formula, conjugates, and displaying real and imaginary parts with c_real and c_imaginary.
Designated initializers let you initialize specific array elements or struct fields by index or name in any order, with unspecified elements defaulting to zero, and apply to arrays, structures, unions.
Explore practical demonstrations of variable length arrays, flexible array members, and complex number types in C, with solutions and a downloadable source file.
Master the const type qualifier and related qualifiers such as volatile and restrict, learning how they enable compiler optimizations, read-only memory, and safe use with pointers, arrays, and parameters.
Explore the volatile type qualifier that prevents caching and stops compiler optimizations, ensuring up-to-date values in real-time and embedded systems, including memory mapped registers and multi-threaded globals.
Explore the restrict qualifier in c, signaling a pointer is the sole reference to its data. Grasp its syntax, optimization impact, and mem copy versus mem move handling of overlaps.
Learn bit manipulation in C by understanding binary numbers and bits, converting between binary and decimal, and applying two's complement concepts, bit operations, and bit fields.
Explore binary numbers and bits through two challenges: convert binary to decimal and decimal to binary by implementing functions that return numeric values, using long long for binary representations.
Watch a practical demonstration of converting binary to decimal and decimal to binary in a C program, using math.h, long long inputs, and iterative base conversions.
Explore bitwise operators in C, including and, or, xor, and not, learn bit manipulation, bitmasking, testing and setting bits, and understand two's complement implications for portable code.
Learn bitwise shifting in c, including left and right shifts, 32-bit integers, and how unsigned and signed values affect results, with undefined behavior and practical examples.
Explore bitwise operators by reading two integers, computing one's complement, applying and, or, xor, performing left and right shifts, and displaying results as binary strings.
Demonstrates bitwise operators in C, including and, or, exclusive or, and left and right shifts, using a decimal-to-binary function and binary printouts to illustrate two's and one's complement representations.
Explore how bitmasks use bitwise operators to turn bits on and off, toggle them, and read bit values in a 32-bit integer via masking for compact state representation.
Explore how bitwise operators pack data into 32-bit integers, using bit masks to set and read flags, and compare this with bit fields for memory efficiency.
Learn to set and read bits by building a program that inputs a number, checks a bit, and sets it to one, using bit masks and shifts.
Demonstrates reading and setting a bit in an integer via right and left shifts, bitwise and and or, using user input and showing before and after values.
Learn how bit fields pack data in a struct for memory efficiency and easy access, using unsigned int fields with a colon to set bit width and padding.
Explores using bit fields in a structure to pack an on-screen box’s properties—opacity, border visibility, fill and border colors, and border style—into 16 bits for efficient memory use.
Demonstrate packing box properties with bit fields in C, including the opaque flag, fill and border colors, and border style, plus a show settings helper and value modification.
Explore the goto statement and its control flow, including labels and why it creates spaghetti code, with a rare use for exiting deeply nested loops using break or continue.
Use the goto statement to simulate nested loops and print a triangle of asterisks in C. Learn why goto creates spaghetti code and practice problem solving without loops.
Learn the null statement, an expression statement with no expression, used to control loops in C. Differentiate it from the null keyword and the null terminator.
Explore the comma operator in C, its role as the lowest-precedence binary operator and sequence point, and how it separates expressions, assignments, and function arguments.
Explore setjmp and longjmp, which enable complex control flow for error recovery and cross-function jumps. Setjmp saves the program state in a jmp_buf, and longjmp restores it.
Learn to use setjmp and longjmp to recover from errors by transferring control back to the main input loop, using an error recovery function that prints error and longjmp back.
Explore advanced control flow in C by using goto to draw a tree of asterisks and setjmp/longjmp for basic error recovery.
Explore how C reads and writes characters with getchar, getc, fgetc, and ungetc through stdio.h and the standard streams stdin, stdout, and stderr, and learn about eof and ASCII representations.
Explore character output in C using putc, putchar, and fputc to write to standard output or files, with examples on handling eof and file pointers.
Count words and characters from standard input or file in C program, using command line arguments and a temporary file, then convert upper to lower with fgetc, fputc, and isupper.
Demonstrate two character input output tasks in c: count words and characters from a file or standard input using command line arguments, then swap case with fgetc and fputc.
Explore string input and output in the advanced c programming course by comparing gets, fgets, and getline, highlighting safety, buffer overflow risks, and proper use with puts and fputs.
Explore string input/output in C by implementing a challenge that reads lines from a file with fgets or getline and prints lines containing a given character using puts.
Demonstrates reading lines from a data file and searching for a character via command line arguments in C, using a 256-byte buffer, a has_ch helper, and fgets with fputs.
Explore C's formatting functions, including sprintf, fprintf, fscanf, sscanf, and fflush, with safe usage and file I/O examples. Learn when to use fgets+sscanf versus fscanf for better recovery.
Practice formatting functions using fscanf, fgets, and scanf to read numbers from a file. Identify even, odd, and prime numbers and output their characteristics with helper functions.
Watch a demonstration of formatting functions in C, reading numbers from a file, and classifying them as even, odd, or prime using helper routines and fscanf.
What you will learn in this course?
The C programming language in 2020 is still one of the most popular and widely used languages. Having C programming skills gives you great career options, but learning the C language, particularly some of the trickier advanced stuff can be really difficult.
This course is designed to take your basic C skills to the next level and help you obtain mastery of the language by helping you understand advanced concepts of the C programming language, enabling you to master the art of problem-solving in programming using efficient, proven methods.
You’ll learn how to write high-quality C code and to make yourself more marketable for higher-level programming positions.
Just some of the topics in this huge 28-hour course include Threads, Function Pointers, Double Pointers, Recursion, Networking using Sockets, Bit manipulation, Macros, Signals, Storage Classes and loads more. Check the curriculum on this page for full details of what is included in this very comprehensive course.
By the end of this course, with your new-found skills, you will be able to apply for real-time/embedded C programming positions or any job that requires mastery of the C programming language and be able to apply your new skills developing your own Advanced C programs.
What's different about this course?
Jason Fedin is your instructor in this course and this course takes the skills you learned in that course to the next level.
This course focuses on the details and a thorough understanding of all advanced C programming concepts. This is not just a how-to course, it is a "why?" course.
You will learn how to implement specific advanced C concepts such as multi-threading and double pointers, in addition to learning why they are the best approach and how they make you a high-quality C programmer.
Many, many examples, challenges and quizzes are provided to test your understanding of every concept that you have learned.
This course is unique to other courses here at Udemy in that the details and the why are explained. We do not just go through projects and provide a how-to.
Who is the course aimed at?
This is not a beginner's course. It's assumed you have some knowledge of the C programming language, preferably having completed our Beginner course (here on Udemy) or similar training and/or commercial programming experience in C or a similar language.
Getting started
If you are ready to get started, click on the enroll or Add to Cart button on this page and start taking your C Language skills to the next level.