C is an imperative, procedural programming language. It was initially developed by Dennis Ritchie between 1969 and 1973. It was mainly developed as a system programming language to write operating system. The main features of C language include low-level access to memory, simple set of keywords, and clean style, these features make C language suitable for system programming like operating system or compiler development.
But why learn C?, here are some of the important advantages of learning C programming:
- C is a Middle-Level Language, C gives as a good opportunity to interact with hardware, It reduces the gap between the low-level and high-level languages. It can be used for writing operating systems as well as doing application level programming.
- Helps to understand the fundamentals of Computer Theories, Most of the theories related to computers like Computer Networks, Compiler Designing, Computer Architecture, Operating Systems are based on C programming language and requires a good knowledge of C.
- C is very fast in terms of execution time, Programs written and compiled in C execute much faster than compared to any other programming language.
- It will be easier to learn other programming languages, Because so many different programming languages are based on or related to C, your knowledge of C will simplify the process of learning other languages. These languages typically share similar syntax, operators, control statements, data types and more.
- The structure simplifies testing and debugging, The C programming language is a strongly typed language, meaning data structures and variables must be declared in advance. As such, the compiler is able to enforce proper usage of these declared types and catch a variety of bugs at compile-time.
This repository contains projects developed using C language.
This table contains all the projects of this repository, click on a project name to be redirected to the project.
Please follow the next directory order:
Project Directory | Summary |
---|---|
hello_world |
First steps with C language, brief history of C, what is gcc and how to use it, what is an entry point, how to print text using printf, puts, and putchar, how to get the size of a specific type using the unary operator sizeof, and more. |
variables_if_else_while |
Getting to know C operators (arithmetic, logical, relational, boolean, etc.). First steps with data types, conditional statements, and loops. Using printf function, and working with ASCCI characters. |
functions_nested_loops |
Working with nested loops, what is a function and how to use it, difference between a declaration and a definition of a function, what is a prototype, what is a header file and how to use it, and more. |
debugging |
Debugging is the process of finding and fixing errors in software that prevents it from running correctly, what are some methods of debugging manually, how to read the error messages, and more. |
more_functions_nested_loops |
Working some more with nested loops, scope of variables, what are the gcc flags -Wall -Werror -pedantic -Wextra -std=gnu89 , what are header files and how to to use them with #include , and more. |
pointers_arrays_strings |
What are pointers, arrays, strings and how to use them, what are the differences between pointers and arrays, scope of variables, and more. |
recursion |
What is recursion, how to implement recursion, in what situations you should implement recursion, in what situations you shouldn’t implement recursion, and more. |
static_libraries |
What is a static library, how does it work, how to create one, and how to use it, Basic usage of ar , ranlib , nm , and more. |
argc_argv |
How to use arguments passed to your program, what are two prototypes of main that you know of, and in which case do you use one or the other, how to use __attribute__((unused)) or (void) to compile functions with unused variables or parameters, and more. |
malloc_free |
What is the difference between automatic and dynamic allocation, what is malloc and free and how to use them, Why and when use malloc , how to use valgrind to check for memory leak, and more. |
more_malloc_free |
How to use the exit function, what are the functions calloc and realloc from the standard library and how to use them, and more. |
preprocessor |
What are macros and how to use them, what are the most common predefined macros, how to include guard your header files, and more. |
structures_typedef |
What are structures, when, why and how to use them, How to use typedef , and more. |
function_pointers |
What are function pointers and how to use them, what does a function pointer exactly hold, where does a function pointer point to in the virtual memory, and more. |
variadic_functions |
What are variadic functions, how to use va_start , va_arg and va_end macros, why and how to use the const type qualifier, and more. |
makefiles |
What are make and makefiles, when, why and how to use makefiles, what are rules and how to set and use them, what are the most common / useful rules, what are variables and how to set and use them, and more. |
singly_linked_lists |
When and why using linked lists vs arrays, how to build and use linked lists, and more. |
more_singly_linked_lists |
How to use linked lists, insertion and deletion of nodes at the beginning, at the end or at a given position in a singly linked list, how to free memory in a singly linked list, and more. |
bit_manipulation |
How to manipulate bits and use bitwise operators, how to set values of bits at a given position/index, how to print the binary representation of a number usign bitwise operators, and more. |
file_io |
How to create, open, close, read and write files, what are file descriptors, how to use the I/O system calls open , close , read and write , What are and how to use the flags O_RDONLY , O_WRONLY , O_RDWR , what is a system call, and more. |
doubly_linked_lists |
What is a doubly linked list, how to use doubly linked lists, add a node at the beginning, the end or at a given position of a doubly linked list, how to free a doubly linked list, and more. |
hash_tables |
What is a hash function, what is a hash table, how do they work and how to use them, what is a collision and what are the main ways of dealing with collisions in the context of a hash table, what are the most common use cases of hash tables, and more. |
search_algorithms |
What are Bubble sort , Insertion sort , Selection sort and Quick sort sorting algorithms and how to use them, what is the Big O notation, and how to evaluate the time complexity of an algorithm, and more. |