C code has potential to be very compact, often at a price of losing comprehensibility and maintainability.
Let's discuss a few tips that might put smile on your face in a distress time.
o) Always save return value from a function, if available
This is very poor coding style. If myfun() can return one out of hundreds of non-zero error codes, it makes sense to save the return value.
if( (ret = myfun()) != 0 )
This value would help you in
o) zero down the point of return
o) debugging as "ret" is now part of the caller's frame and hence available for examination.
o) An extra log message would cause less harm than being savvy and avoiding it. It is tantamount to have enough log messages embedded in your code at critical points. Trust me, it makes your life so easy. Logging in itself is a vast topic and, I plan to take that separately.
o) Comments should be added generously. Explain what a file, function is doing. Explain the algorithm, input/output parameters of a function and return types.
If your function allocates dynamic memory, who bears the burden of freeing that memory, be explicit and mention that.
o) Keep a function "static" unless you need it in other file of the project. This saves linkers effort.