Nilorea Library
C utilities for networking, threading, graphics
Loading...
Searching...
No Matches
ex_exceptions.c
Go to the documentation of this file.
1
9#include "nilorea/n_log.h"
11
12int array_exception(int boolean) {
13 if (boolean) {
14 n_log(LOG_NOTICE, "Throwed signal");
16 }
17 n_log(LOG_NOTICE, "No signal Throwed !");
18
19 return 1;
20}
21
22int divzero_exception(int boolean) {
23 if (boolean) {
24 n_log(LOG_NOTICE, "Throwed signal");
26 }
27 n_log(LOG_NOTICE, "No signal Throwed !");
28
29 return 1;
30}
31
32int overflow_exception(int boolean) {
33 if (boolean) {
34 n_log(LOG_NOTICE, "Throwed signal");
36 }
37 n_log(LOG_NOTICE, "No signal Throwed !");
38
39 return 1;
40}
41
42int parsing_exception(int boolean) {
43 if (boolean) {
44 n_log(LOG_NOTICE, "Throwed signal");
46 }
47 n_log(LOG_NOTICE, "No signal Throwed !");
48
49 return 1;
50}
51
52int all_exception(int boolean) {
53 if (boolean) {
54 n_log(LOG_NOTICE, "Throwed signal");
56 }
57 n_log(LOG_NOTICE, "No signal Throwed !");
58
59 return 1;
60}
61
62int main(void) {
65
66 puts("ArrayNoCatch");
67 Try {
68 n_log(LOG_INFO, "Trying signal:ARRAY_EXCEPTION false");
70 n_log(LOG_NOTICE, "Trying signal:ARRAY_EXCEPTION true");
72 }
73 EndTry;
74 puts("ArrayCatch");
75 Try {
76 n_log(LOG_NOTICE, "Trying signal:ARRAY_EXCEPTION false");
78 n_log(LOG_NOTICE, "Trying signal:ARRAY_EXCEPTION true");
80 }
82 n_log(LOG_NOTICE, "Caught signal ARRAY_EXCEPTION");
83 }
84 EndTry;
85 /***************************************************************/
86 puts("DivZeroNoCatch");
87 Try {
88 n_log(LOG_NOTICE, "Trying signal:DIVZERO_EXCEPTION false");
90 n_log(LOG_NOTICE, "Trying signal:DIVZERO_EXCEPTION true");
92 }
93 EndTry;
94 puts("DivZeroCatch");
95 Try {
96 n_log(LOG_NOTICE, "Trying signal:DIVZERO_EXCEPTION false");
98 n_log(LOG_NOTICE, "Trying signal:DIVZERO_EXCEPTION true");
100 }
102 n_log(LOG_NOTICE, "Caught signal DIVZERO_EXCEPTION");
103 }
104 EndTry;
105 /***************************************************************/
106 Try {
107 n_log(LOG_NOTICE, "Trying signal:OVERFLOW_EXCEPTION false");
109 n_log(LOG_NOTICE, "Trying signal:OVERFLOW_EXCEPTION true");
111 }
112 EndTry;
113 Try {
114 n_log(LOG_NOTICE, "Trying signal:OVERFLOW_EXCEPTION false");
116 n_log(LOG_NOTICE, "Trying signal:OVERFLOW_EXCEPTION true");
118 }
120 n_log(LOG_NOTICE, "Caught signal OVERFLOW_EXCEPTION ");
121 }
122 EndTry;
123 /***************************************************************/
124 Try {
125 n_log(LOG_NOTICE, "Trying signal:PARSING_EXCEPTION false");
127 n_log(LOG_NOTICE, "Trying signal:PARSING_EXCEPTION true");
129 }
130 EndTry;
131 Try {
132 n_log(LOG_NOTICE, "Trying signal:PARSING_EXCEPTION false");
134 n_log(LOG_NOTICE, "Trying signal:PARSING_EXCEPTION true");
136 }
138 n_log(LOG_NOTICE, "Caught signal PARSING_EXCEPTION");
139 }
140 EndTry;
141 /***************************************************************/
142 Try {
143 n_log(LOG_NOTICE, "Trying signal:ALL_EXCEPTION false");
144 all_exception(0);
145 n_log(LOG_NOTICE, "Trying signal:ALL_EXCEPTION true");
146 all_exception(1);
147 }
148 EndTry;
149 Try {
150 n_log(LOG_NOTICE, "Trying signal:ALL_EXCEPTION false");
151 all_exception(0);
152 n_log(LOG_NOTICE, "Trying signal:ALL_EXCEPTION true");
153 all_exception(1);
154 }
156 n_log(LOG_NOTICE, "Caught signal matching GENERAL_EXCEPTION");
157 }
158 EndTry;
159
160// nest Try Catch blocks are going to generate a masked (shadowed) variable declaration warning, hence the temporary disable
161#pragma GCC diagnostic push
162#pragma GCC diagnostic ignored "-Wshadow"
163 Try {
164 n_log(LOG_NOTICE, "Trying mixed Try-Catch blocks, we are inside block 1");
165 Try {
166 n_log(LOG_NOTICE, "We're inside block 2");
168 }
170 n_log(LOG_NOTICE, "Caught signal matching GENERAL_EXCEPTION inside block 2");
171 }
172 EndTry;
174 }
176 n_log(LOG_NOTICE, "Caught signal matching GENERAL_EXCEPTION inside block 1");
177 }
178 EndTry;
179#pragma GCC diagnostic pop
180
181 exit(0);
182}
int overflow_exception(int boolean)
int array_exception(int boolean)
int all_exception(int boolean)
int divzero_exception(int boolean)
int main(void)
int parsing_exception(int boolean)
#define Throw(X)
Macro helper for adding exception throwing in custom functions.
#define OVERFLOW_EXCEPTION
Possibly Throwed value, we checked an overflow in our arrays.
#define Try
Macro for replacing try.
#define GENERAL_EXCEPTION
General exception, we just detected an error an decided to go back where we're safe.
#define PARSING_EXCEPTION
Possibly Throwed value, we checked an error during a char * parsing.
#define ARRAY_EXCEPTION
Possibly Throwed value, we checked an out of bound operation.
#define Catch(X)
Macro for replacing catch.
#define DIVZERO_EXCEPTION
Possibly Throwed value, we check a divide by zero operation.
#define EndTry
Macro helper for closing the try-catch block.
#define n_log(__LEVEL__,...)
Logging function wrapper to get line and func.
Definition n_log.h:70
#define LOG_DEBUG
debug-level messages
Definition n_log.h:65
#define LOG_STDERR
internal, default LOG_TYPE
Definition n_log.h:31
void set_log_level(const int log_level)
Set the global log level value ( static int LOG_LEVEL )
Definition n_log.c:104
#define LOG_NOTICE
normal but significant condition
Definition n_log.h:61
#define LOG_INFO
informational
Definition n_log.h:63
Exception management for C.
Generic log system.