| Data Structures and Algorithms | 
| Errors in C ADTs | 
What can we do in C?
Often there will be a value of the function return which 
can be used for indicating an error condition.
Constructors return pointers to blocks of memory allocated for
the object:
a null pointer indicates an error.
int f( ... ) {
    X a;
    a = ConsX( ... );
    if ( a != NULL ) {
        /* No error */
        ....
        return 1;
        }
    else
        {
        /* return an error value to the next level up */
        return 0;
        }
    }
/* vector.h */
typedef struct vector_t *vector;
typedef enum( NoError, SizeMisMatch, NoMemory, InvalidVector )
                                 vector_error;
double AddVector( vector a, vector b, int *error );
The implementation:
#include "vector.h"
double DotProduct( vector a, vector b, vector_error *error ) {
    if ( LengthVector(a) == LengthVector(b) )
        {
        ....
        }
    else
        {
  *error = SizeMisMatch;
  return 0.0;
        }
  }
This solution, while achieving the aim of robust code,
would probably be considered too cumbersome.
The additional argument also adds to the execution time.
| Continue on to C Errors (emulating an 
exception mechanism) Back to the Table of Contents |