Skip to content

Foundations of programming with C, projects related to topics like pointers and arrays, malloc and its friends, structures, function pointers, variadic functions, bit manipulation, file I/O, etc.

Notifications You must be signed in to change notification settings

schambig/holbertonschool-low_level_programming

Repository files navigation

made-with-Markdown GitHub last commit C|C

Low-level Programming

DescriptionProjects

C Programming


Description

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.

Projects

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.

Back to top

About

Foundations of programming with C, projects related to topics like pointers and arrays, malloc and its friends, structures, function pointers, variadic functions, bit manipulation, file I/O, etc.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages