KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I was reverse engineering some code and came across this... /************************************************************************/ /* */ /* MACRO CHECK_FREAD */ /* */ /* CHECK_FREAD is used to check the status of a file read. It */ /* is passed the return code from read and a string to print out if */ /* an error is detected. If an error is found, an error message is */ /* printed out and the program terminates. This was made into a */ /* macro because it had to be done over and over and over . . . */ /* */ /************************************************************************/ #define CHECK_FREAD(X, msg) if (X==-1) \ { \ return(DCD_BADREAD); \ } Basically, the particular set of functions in this file call this whenever they do a (c-read) to check the result for an error. They also have a similar check for EOF... Basically as far as I can tell, they're doing it this way to insert returns on error in the middle of their function in a bunch of places. e.g. /* Read in an 4 */ ret_val = read(fd, &input_integer, sizeof(int32)); CHECK_FREAD(ret_val, "reading an 4"); CHECK_FEOF(ret_val, "reading an 4"); if (input_integer != 4) { return(DCD_BADFORMAT); } /* Read in the number of atoms */ ret_val = read(fd, &input_integer, sizeof(int32)); *N = input_integer; CHECK_FREAD(ret_val, "reading number of atoms"); CHECK_FEOF(ret_val, "reading number of atoms"); Now I'm just getting back into c/c++ programming, and I never used macro's much in the first place, but is this
Tags (comma-separated)
Save Edits
Cancel