Apart from the constructor functions (the functions returning pointers to the
chemfiles types); all the functions return a status code from the
chfl_status enum:
chfl_status¶`chfl_status` list the possible values for the return status code of chemfiles functions.
Values:
CHFL_SUCCESS =  0¶Status code for successful operations.
CHFL_MEMORY_ERROR =  1¶Status code for error concerning memory: out of memory, wrong size for pre-allocated buffers, *etc.*
CHFL_FILE_ERROR =  2¶Status code for error concerning files: the file do not exist, the user does not have rights to open it, *etc.*
CHFL_FORMAT_ERROR =  3¶Status code for error in file formating, i.e. for invalid files.
CHFL_SELECTION_ERROR =  4¶Status code for invalid selection strings.
CHFL_GENERIC_ERROR =  5¶Status code for any other error from Chemfiles.
CHFL_CXX_ERROR =  6¶Status code for error in the C++ standard library.
The following function allow to handle errors:
chfl_last_error(void)¶Get the last error message.
// Generate an error
chfl_trajectory_open("noformat", 'r');
const char* error = chfl_last_error();
assert(strcmp(error, "Can not find a format associated with the \"\" extension.") == 0);
chfl_clear_errors(void)¶Clear the last error message.
// Generate an error
chfl_trajectory_open("noformat", 'r');
const char* error = chfl_last_error();
assert(strcmp(error, "") != 0);
chfl_clear_errors();
error = chfl_last_error();
assert(strcmp(error, "") == 0);
chfl_warning_callback)(const char *message)¶Callback type that can be used to process warning events.
chfl_set_warning_callback(chfl_warning_callback callback)¶Set the global warning `callback` to be used for each warning event.
char LAST_WARNING[1024] = {0};
void warning_callback(const char* message) {
    strncpy(LAST_WARNING, message, 1024);
    LAST_WARNING[1023] = '\0';
}
int main() {
    chfl_set_warning_callback(warning_callback);
    // Generate a warning event
    chfl_trajectory_open("noformat", 'r');
    assert(strcmp(LAST_WARNING, "Can not find a format associated with the \"\" extension.") == 0);
    return 0;
}