|  | 
| #define | FNFT__WARN(msg)   fnft__warn_aux(__func__, __LINE__, msg); | 
|  | 
| #define | FNFT__E_NOMEM   FNFT__ERRMSG(FNFT_EC_NOMEM, "Out of memory.") | 
|  | 
| #define | FNFT__E_INVALID_ARGUMENT(name)   FNFT__ERRMSG(FNFT_EC_INVALID_ARGUMENT, FNFT__E_INVALID_ARGUMENT_(name)) | 
|  | 
| #define | FNFT__E_SUBROUTINE(ec)   FNFT__ERRMSG(-abs(ec), "Subroutine failure.") | 
|  | 
| #define | FNFT__E_DIV_BY_ZERO   FNFT__ERRMSG(FNFT_EC_DIV_BY_ZERO, "Division by zero.") | 
|  | 
| #define | FNFT__E_TEST_FAILED   FNFT__ERRMSG(FNFT_EC_TEST_FAILED, "Test failed.") | 
|  | 
| #define | FNFT__E_OTHER(msg)   FNFT__ERRMSG(FNFT_EC_OTHER, msg) | 
|  | 
| #define | FNFT__E_NOT_YET_IMPLEMENTED(name,  msg)   FNFT__ERRMSG(FNFT_EC_NOT_YET_IMPLEMENTED, FNFT__E_NOT_YET_IMPLEMENTED_(name,msg)) | 
|  | 
| #define | FNFT__E_SANITY_CHECK_FAILED(msg)   FNFT__ERRMSG(FNFT_EC_SANITY_CHECK_FAILED, FNFT__E_SANITY_CHECK_FAILED_(msg)) | 
|  | 
| #define | FNFT__E_ASSERTION_FAILED   FNFT__ERRMSG(FNFT_EC_ASSERTION_FAILED, "Assertion failed.") | 
|  | 
| #define | FNFT__CHECK_RETCODE(ret_code,  label)   {if (ret_code!=FNFT_SUCCESS) {ret_code=FNFT__E_SUBROUTINE(ret_code);goto label;}} | 
|  | 
| #define | FNFT__CHECK_NOMEM(var,  ret_code,  label)   {if (var==NULL) {ret_code=FNFT__E_NOMEM;goto label;}} | 
|  | 
| #define | FNFT__ERRMSG(ec,  msg)   fnft__errmsg_aux(ec, __func__, __LINE__, msg); | 
|  | 
| #define | FNFT__E_INVALID_ARGUMENT_(name)   "Invalid argument "#name"." | 
|  | 
| #define | FNFT__E_NOT_YET_IMPLEMENTED_(name,  msg)   "Not yet implemented ("#name"). "#msg | 
|  | 
| #define | FNFT__E_SANITY_CHECK_FAILED_(msg)   "Sanity check failed ("#msg")." | 
|  | 
Provides macros for raising and checking errors.