Learn C – The Hard Way

بسم الله الرحمن الرحيم

Introduction: The Cartesian Dream Of C
Exercise 0: The Setup
Exercise 1: Dust Off That Compiler
Exercise 2: Make Is Your Python Now
Exercise 3: Formatted Printing
Exercise 4: Introducing Valgrind
Exercise 5: The Structure Of A C Program
Exercise 6: Types Of Variables
Exercise 7: More Variables, Some Math
Exercise 8: Sizes And Arrays
Exercise 9: Arrays And Strings
Exercise 10: Arrays Of Strings, Looping
Exercise 11: While-Loop And Boolean Expressions
Exercise 12: If, Else-If, Else
Exercise 13: Switch Statement
Exercise 14: Writing And Using Functions
Exercise 15: Pointers Dreaded Pointers
Exercise 16: Structs And Pointers To Them
Exercise 17: Heap And Stack Memory Allocation
Exercise 18: Pointers To Functions
Exercise 19: A Simple Object System
Exercise 20: Zed's Awesome Debug Macros
Exercise 21: Advanced Data Types And Flow Control
Exercise 22: The Stack, Scope, And Globals
Exercise 23: Meet Duff's Device
Exercise 24: Input, Output, Files
Exercise 25: Variable Argument Functions
Exercise 26: Write A First Real Program
Exercise 27: Creative And Defensive Programming
Exercise 28: Intermediate Makefiles
Exercise 29: Libraries And Linking
Exercise 30: Automated Testing
Exercise 31: Debugging Code
Exercise 32: Double Linked Lists
Exercise 33: Linked List Algorithms
Exercise 34: Dynamic Array
Exercise 35: Sorting And Searching
Exercise 36: Safer Strings
Exercise 37: Hashmaps
Exercise 38: Hashmap Algorithms
Exercise 39: String Algorithms
Exercise 40: Binary Search Trees
Exercise 41: Using Cachegrind And Callgrind For Performance Tuning
Exercise 42: Stacks and Queues
Exercise 43: A Simple Statistics Engine
Exercise 44: Ring Buffer
Exercise 45: A Simple TCP/IP Client
Exercise 46: Ternary Search Tree
Exercise 47: A Fast URL Router
Exercise 48: A Tiny Virtual Machine Part 1
Exercise 48: A Tiny Virtual Machine Part 2
Exercise 50: A Tiny Virtual Machine Part 3
Exercise 51: A Tiny Virtual Machine Part 4
Exercise 52: A Tiny Virtual Machine Part 5

Read More

ChatClick here to chat!+