Nilorea Library
C utilities for networking, threading, graphics
Loading...
Searching...
No Matches
ex_exceptions.c
1
7#include "nilorea/n_log.h"
9
10int array_exception(int boolean) {
11 if (boolean) {
12 n_log(LOG_NOTICE, "Throwed signal");
14 }
15 n_log(LOG_NOTICE, "No signal Throwed !");
16
17 return 1;
18}
19
20int divzero_exception(int boolean) {
21 if (boolean) {
22 n_log(LOG_NOTICE, "Throwed signal");
24 }
25 n_log(LOG_NOTICE, "No signal Throwed !");
26
27 return 1;
28}
29
30int overflow_exception(int boolean) {
31 if (boolean) {
32 n_log(LOG_NOTICE, "Throwed signal");
34 }
35 n_log(LOG_NOTICE, "No signal Throwed !");
36
37 return 1;
38}
39
40int parsing_exception(int boolean) {
41 if (boolean) {
42 n_log(LOG_NOTICE, "Throwed signal");
44 }
45 n_log(LOG_NOTICE, "No signal Throwed !");
46
47 return 1;
48}
49
50int all_exception(int boolean) {
51 if (boolean) {
52 n_log(LOG_NOTICE, "Throwed signal");
54 }
55 n_log(LOG_NOTICE, "No signal Throwed !");
56
57 return 1;
58}
59
60int main(void) {
63
64 puts("ArrayNoCatch");
65 Try {
66 n_log(LOG_INFO, "Trying signal:ARRAY_EXCEPTION false");
67 array_exception(0);
68 n_log(LOG_NOTICE, "Trying signal:ARRAY_EXCEPTION true");
69 array_exception(1);
70 }
71 EndTry;
72 puts("ArrayCatch");
73 Try {
74 n_log(LOG_NOTICE, "Trying signal:ARRAY_EXCEPTION false");
75 array_exception(0);
76 n_log(LOG_NOTICE, "Trying signal:ARRAY_EXCEPTION true");
77 array_exception(1);
78 }
80 n_log(LOG_NOTICE, "Caught signal ARRAY_EXCEPTION");
81 }
82 EndTry;
83 /***************************************************************/
84 puts("DivZeroNoCatch");
85 Try {
86 n_log(LOG_NOTICE, "Trying signal:DIVZERO_EXCEPTION false");
87 divzero_exception(0);
88 n_log(LOG_NOTICE, "Trying signal:DIVZERO_EXCEPTION true");
89 divzero_exception(1);
90 }
91 EndTry;
92 puts("DivZeroCatch");
93 Try {
94 n_log(LOG_NOTICE, "Trying signal:DIVZERO_EXCEPTION false");
95 divzero_exception(0);
96 n_log(LOG_NOTICE, "Trying signal:DIVZERO_EXCEPTION true");
97 divzero_exception(1);
98 }
100 n_log(LOG_NOTICE, "Caught signal DIVZERO_EXCEPTION");
101 }
102 EndTry;
103 /***************************************************************/
104 Try {
105 n_log(LOG_NOTICE, "Trying signal:OVERFLOW_EXCEPTION false");
106 overflow_exception(0);
107 n_log(LOG_NOTICE, "Trying signal:OVERFLOW_EXCEPTION true");
108 overflow_exception(1);
109 }
110 EndTry;
111 Try {
112 n_log(LOG_NOTICE, "Trying signal:OVERFLOW_EXCEPTION false");
113 overflow_exception(0);
114 n_log(LOG_NOTICE, "Trying signal:OVERFLOW_EXCEPTION true");
115 overflow_exception(1);
116 }
118 n_log(LOG_NOTICE, "Caught signal OVERFLOW_EXCEPTION ");
119 }
120 EndTry;
121 /***************************************************************/
122 Try {
123 n_log(LOG_NOTICE, "Trying signal:PARSING_EXCEPTION false");
124 parsing_exception(0);
125 n_log(LOG_NOTICE, "Trying signal:PARSING_EXCEPTION true");
126 parsing_exception(1);
127 }
128 EndTry;
129 Try {
130 n_log(LOG_NOTICE, "Trying signal:PARSING_EXCEPTION false");
131 parsing_exception(0);
132 n_log(LOG_NOTICE, "Trying signal:PARSING_EXCEPTION true");
133 parsing_exception(1);
134 }
136 n_log(LOG_NOTICE, "Caught signal PARSING_EXCEPTION");
137 }
138 EndTry;
139 /***************************************************************/
140 Try {
141 n_log(LOG_NOTICE, "Trying signal:ALL_EXCEPTION false");
142 all_exception(0);
143 n_log(LOG_NOTICE, "Trying signal:ALL_EXCEPTION true");
144 all_exception(1);
145 }
146 EndTry;
147 Try {
148 n_log(LOG_NOTICE, "Trying signal:ALL_EXCEPTION false");
149 all_exception(0);
150 n_log(LOG_NOTICE, "Trying signal:ALL_EXCEPTION true");
151 all_exception(1);
152 }
154 n_log(LOG_NOTICE, "Caught signal matching GENERAL_EXCEPTION");
155 }
156 EndTry;
157
158// nest Try Catch blocks are going to generate a masked (shadowed) variable declaration warning, hence the temporary disable
159#pragma GCC diagnostic push
160#pragma GCC diagnostic ignored "-Wshadow"
161 Try {
162 n_log(LOG_NOTICE, "Trying mixed Try-Catch blocks, we are inside block 1");
163 Try {
164 n_log(LOG_NOTICE, "We're inside block 2");
166 }
168 n_log(LOG_NOTICE, "Caught signal matching GENERAL_EXCEPTION inside block 2");
169 }
170 EndTry;
172 }
174 n_log(LOG_NOTICE, "Caught signal matching GENERAL_EXCEPTION inside block 1");
175 }
176 EndTry;
177#pragma GCC diagnostic pop
178
179 exit(0);
180}
#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:69
#define LOG_DEBUG
debug-level messages
Definition n_log.h:64
#define LOG_STDERR
internal, default LOG_TYPE
Definition n_log.h:30
void set_log_level(const int log_level)
Set the global log level value ( static int LOG_LEVEL )
Definition n_log.c:91
#define LOG_NOTICE
normal but significant condition
Definition n_log.h:60
#define LOG_INFO
informational
Definition n_log.h:62
Exception management for C.
Generic log system.