online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
/****************************************************************************** Welcome to GDB Online. GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl, C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog. Code, Compile, Run and Debug online from anywhere in world. Gabriel Staples 6 Dec. 2019 Demonstrate how to handle errors in C, using enums and a function to convert these enums to printable strings. See also: https://stackoverflow.com/questions/385975/error-handling-in-c-code *******************************************************************************/ // --------------- // mymodule.h // --------------- /// Get the number of elements in any C array /// - Usage example: [my own answer]: /// https://arduino.stackexchange.com/a/80289/7727 #define ARRAY_LEN(array) (sizeof(array) / sizeof((array)[0])) /// @brief Error codes for library "mymodule" typedef enum mymodule_error_e { /// No error MYMODULE_ERROR_OK = 0, /// Invalid arguments (ex: NULL pointer where a valid pointer is required) MYMODULE_ERROR_INVARG, /// Out of memory (RAM) MYMODULE_ERROR_NOMEM, /// Make up your error codes as you see fit MYMODULE_ERROR_MYERROR, // etc etc /// Total # of errors in this list (NOT AN ACTUAL ERROR CODE); /// NOTE: that for this to work, it assumes your first error code is value 0 and you let it naturally /// increment from there, as is done above, without explicitly altering any error values above MYMODULE_ERROR_COUNT, } mymodule_error_t; // Array of strings to map enum error types to printable strings // - see important NOTE above! const char* const MYMODULE_ERROR_STRS[] = { "MYMODULE_ERROR_OK", "MYMODULE_ERROR_INVARG", "MYMODULE_ERROR_NOMEM", "MYMODULE_ERROR_MYERROR", }; _Static_assert(ARRAY_LEN(MYMODULE_ERROR_STRS) == MYMODULE_ERROR_COUNT, "You must keep your `mymodule_error_t` enum and your " "`MYMODULE_ERROR_STRS` array in-sync!"); // To get a printable error string const char* mymodule_error_str(mymodule_error_t err); // Other functions in mymodule mymodule_error_t mymodule_func1(void); mymodule_error_t mymodule_func2(void); mymodule_error_t mymodule_func3(void); // --------------- // mymodule.c // --------------- #include <stdio.h> /// @brief Function to get a printable string from an enum error type /// @param[in] err a valid error code for this module /// @return A printable C string corresponding to the error code input above, or NULL if an invalid error code /// was passed in const char* mymodule_error_str(mymodule_error_t err) { const char* err_str = NULL; // Ensure error codes are within the valid array index range if (err >= MYMODULE_ERROR_COUNT) { goto done; } err_str = MYMODULE_ERROR_STRS[err]; done: return err_str; } // Let's just make some empty dummy functions to return some errors; fill these in as appropriate for your // library module mymodule_error_t mymodule_func1(void) { return MYMODULE_ERROR_OK; } mymodule_error_t mymodule_func2(void) { return MYMODULE_ERROR_INVARG; } mymodule_error_t mymodule_func3(void) { return MYMODULE_ERROR_MYERROR; } // --------------- // main.c // --------------- #include <stdio.h> int main() { printf("Demonstration of enum-based error codes in C (or C++)\n"); printf("err code from mymodule_func1() = %s\n", mymodule_error_str(mymodule_func1())); printf("err code from mymodule_func2() = %s\n", mymodule_error_str(mymodule_func2())); printf("err code from mymodule_func3() = %s\n", mymodule_error_str(mymodule_func3())); return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue