Demo
| Name | Description | Files |
|---|---|---|
| Makefile | Makefile to compile all programs | Makefile |
| hello | First program that prints "Hello, world!" | hello.c |
| cat | Reads from stdin and prints out the contents to stdout |
cat.c |
| string | Short demo of using strings showcasing initialing and printing | string.c |
| strings | Writing functions to work with strings like finding the length or copying strings | strings.c |
| strings_lib | Using functions from <strings.h> library to work with strings |
strings_lib.c |
| errno | Error messages for different errno values |
errno.c |
| float | Showcasing how floating points have limited precision | float.c |
| float_2 | Adding two floats of very different magnitudes might result to no change to the big number | float_2.c |
| float_3 | Assigning a double to a float and back will lose precision |
float_3.c |
| argv | Example of using command line arguments | argv.c |
| stack_overflow | Infinite recursion that results in a crash due to stack overflow. Compiling with -O2 will not result in stack overflow due to tail recursion optimization |
stack_overflow.c |
| sizeof | Due to memory alignment, the size of a struct might be larger than the sum of the contained variables | sizeof.c |
| bad_file | Pass in a non-existent or a non-readable file to see the proper error message | bad_file.c |
| bad_scan | Trying to scan multiple numbers from a string that only contains one results in using uninitialized values for b and c. Showcasing using the return value of the scanf family |
bad_scan.c |
| bad_pointers | The & operator requires an lvalue. Passing in an expression will result in a compilation error |
bad_pointers.c |
| malloc_test | Example of using malloc |
malloc_test.c |
| ArrayList_test | Using ArrayList |
ArrayList_test.c ArrayList.h ArrayList.c |
| mystery2 | mystery2 function from the quiz study guide. Using left shift promotes uint8_t to an unsigned int |
mystery2.c |
| memory_leak | Simple program that does not free allocated memory leading to a memory leak | memory_leak.c |
| badcnt | Two threads incrementing the same variable multiple times leading to blind writes | badcnt.c |
| goodcnt | The above program properly synchronized | goodcnt.c |
| slowprimes | Two workers testing for primality | slowprimes.c slowprimes.py |
| primes | Using Eratosthenes's sieve to count primes under n |
primes.c primes.py |
| bomb | Showcasing using multiple threads for asynchronous I/O | bomb.c |
| demos | Zip file with all files for easy download | demos.zip |