Assert () function usage Summary (recommended), assert Function
The assert macro prototype is defined in<assert.h>
If its condition returns an error, terminate the program execution. The prototype is defined as follows:
#include <assert.h>void assert( int expression );
The role of assert is to calculate the expression. If its value is false (that is, 0), It prints an error message to stderr and then calls abort to terminate the program running. See the following program list badptr. c:
# Include <stdio. h> # include <assert. h> # include <stdlib. h> int main (void) {FILE * fp; fp = fopen ("test.txt", "w"); // open a FILE in writable mode, create a file with the same name as assert (fp) if it does not exist; // No error is found here: fclose (fp); fp = fopen ("noexitfile.txt", "r "); // open a file in read-only mode. If the file does not exist, assert (fp) fails to be opened. // The fclose (fp) error occurs here ); // The program will never be executed here to return 0 ;}
[root@localhost error_process]# gcc badptr.c [root@localhost error_process]# ./a.out a.out: badptr.c:14: main: Assertion `fp' failed.
The disadvantage of having to stop using assert () Is that frequent calls will greatly affect program performance and increase additional overhead. After debugging, you can disable the assert call by inserting # define NDEBUG before the # include <assert. h> statement. The sample code is as follows:
#include <stdio.h>#define NDEBUG#include <assert.h>
Usage summary and precautions:
1) Check the validity of input parameters at the beginning of the function, for example:
Int resetBufferSize (int nNewSize) {// function: Change the buffer size, // parameter: New length of the nNewSize buffer // return value: current length of the buffer // description: nNewSize <= 0 indicates clearing the buffer assert (nNewSize> = 0); assert (nNewSize <= MAX_BUFFER_SIZE );...}
2) Each assert tests only one condition, because when multiple conditions are verified simultaneously, if the assert fails, you cannot intuitively determine which condition fails, for example:
Bad:
assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
Good:
assert(nOffset >= 0);assert(nOffset+nSize <= m_nInfomationSize);
3) You cannot use statements that change the environment, because assert takes effect only on DEBUG. If you do so, problems will occur when the program is actually running, such:
Error:
assert(i++ < 100);
This is because if an error occurs, for example, I = 100 before execution, this statement will not be executed, and the I ++ command will not be executed.
Correct:
assert(i < 100); i++;
4) The assert and subsequent statements should be empty in a row to form a logical and visual sense of consistency.
5) In some cases, assert cannot replace conditional filtering.
The above is a summary of the usage of the assert () function introduced by the editor. I hope it will help you. If you have any questions, please leave a message and I will reply to you in a timely manner. Thank you very much for your support for the help House website!