If the macro
was defined at the moment
was last included, the macro
generates no code, and hence does nothing at all.
Otherwise, the macro
prints an error message to standard error and terminates the program
The message contains the filename, function name and
line number of the macro call, and the output of
No value is returned.
This is a GNU extension.
The purpose of the assert macros is to help the programmer find bugs in
his program, things that cannot happen unless there was a coding mistake.
However, with system or library calls the situation is rather different,
and error returns can happen, and will happen, and should be tested for.
Not by an assert, where the test goes away when
but by proper error handling code.
Never use this macro.