KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to learn C by writing a simple parser / compiler. So far its been a very enlightening experience, however coming from a strong background in C# I'm having some problems adjusting - in particular to the lack of exceptions. Now I've read Cleaner, more elegant, and harder to recognize and I agree with every word in that article; In my C# code I avoid throwing exceptions whenever possible, however now that I'm faced with a world where I can't throw exceptions my error handling is completely swamping the otherwise clean and easy-to-read logic of my code. At the moment I'm writing code which needs to fail fast if there is a problem, and it also potentially deeply nested - I've settled on a error handling pattern whereby "Get" functions return NULL on an error, and other functions return -1 on failure. In both cases the function that fails calls NS_SetError() and so all the calling function needs to do is to clean up and immediately return on a failure. My issue is that the number of if (Action() < 0) return -1; statements that I have is doing my head in - it's very repetitive and completely obscures the underlying logic. I've ended up creating myself a simple macro to try and improve the situation, for example: #define NOT_ERROR(X) if ((X) < 0) return -1 int NS_Expression(void) { NOT_ERROR(NS_Term()); NOT_ERROR(Emit("MOVE D0, D1\n")); if (strcmp(current->str, "+") == 0) { NOT_ERROR(NS_Add()); } else if (strcmp(current->str, "-") == 0) { NOT_ERROR(NS_Subtract()); } else { NS_SetError("Expected: operator"); return -1; } return 0; } Each of the functions NS_Term , NS_Add and NS_Subtract do a NS_SetError()</code
Tags (comma-separated)
Save Edits
Cancel