C Exception Handling Best Practices