Error handling in C is done using various techniques such as checking return values of functions, using `errno` to detect errors, and implementing custom error-handling functions. Proper error handling ensures robustness and reliability of programs.