KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I was taking a look at the assert() reference page and I got stuck while I read the given example: /* assert example */ #include <stdio.h> #include <assert.h> int main () { FILE * datafile; datafile=fopen ("file.dat","r"); assert (datafile); fclose (datafile); return 0; } In this example, assert is used to abort the program execution if datafile compares equal to 0, which happens when the previous call to fopen was not successful. I totally agree that if fopen() fails, assert() will abort execution. However I'm concerned about the rightness of this example: In my opinion assert() is there to detect cases that can't normally happen (like passing a NULL pointer to a function whose documentation states it is forbidden). In this example, failing to open a file is not something that can't normally happen . In fact, I can see dozens of reasons why this would fail. The file couldn't exist, the program could run without required privileges, and so on. I would rather have done something like: /* not longer an assert example */ #include <stdio.h> #include <assert.h> int main () { FILE * datafile; datafile=fopen ("file.dat","r"); if (datafile != NULL) { // Do something, whatever. fclose (datafile); } else { // Report the error somehow. } return 0; } Is my understanding of how assert() should be used incorrect ? EDIT AND GOOD NEWS ! It seems the referred site is ruled by rigorous people. Here is the mail I got back from one of the site maintainer: Hi Julien, I have to agree, the example code was poorly chosen. It has now been just re
Tags (comma-separated)
Save Edits
Cancel