When i attempted to implement min function in C as C lacks this function the compiler gives an error. I've used type of for implementing it just like this
For quick reference:
>#define min(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \ //Min defined
_a < _b ? _a : _b; })
.
.
.
c= min(c+floor(1.0/f), bi.biWidth) ;
r= min(r+floor(1.0/f),abs(bi.biHeight)) ;
Error generated:
>make resize
clang -fsanitize=integer -fsanitize=undefined -ggdb3 -O0 -std=c11 -Wall
-Werror -Wextra -Wno-sign-compare -Wshadow resize.c -lcrypt -lcs50
-lm -o resize
resize.c:191:18: error: implicit declaration of function 'typeof' is
invalid in C99 [-Werror,-Wimplicit-function-declaration]
c= min(c+floor(1.0/f), bi.biWidth) ;
^
resize.c:11:6: note: expanded from macro 'min'
({ typeof (a) _a = (a); \
^
resize.c:191:18: error: expected ';' after expression
resize.c:11:17: note: expanded from macro 'min'
({ typeof (a) _a = (a); \
^
resize.c:191:18: error: use of undeclared identifier '_a'
resize.c:11:17: note: expanded from macro 'min'
({ typeof (a) _a = (a); \
^
resize.c:191:18: error: expected ';' after expression
resize.c:12:18: note: expanded from macro 'min'
typeof (b) _b = (b); \
^
resize.c:191:18: error: use of undeclared identifier '_b'
resize.c:12:18: note: expanded from macro 'min'
typeof (b) _b = (b); \
^
resize.c:191:18: error: use of undeclared identifier '_a'
resize.c:13:5: note: expanded from macro 'min'
_a < _b ? _a : _b; })
^
resize.c:191:18: error: use of undeclared identifier '_b'
resize.c:13:10: note: expanded from macro 'min'
_a < _b ? _a : _b; })
^
resize.c:191:18: error: use of undeclared identifier '_b'
resize.c:13:20: note: expanded from macro 'min'
_a < _b ? _a : _b; })
^
resize.c:193:13: error: expected ';' after expression
r= min(r+floor(1.0/f),abs(bi.biHeight)) ;
^
resize.c:11:17: note: expanded from macro 'min'
({ typeof (a) _a = (a); \
^
resize.c:193:13: error: use of undeclared identifier '_a'
resize.c:11:17: note: expanded from macro 'min'
({ typeof (a) _a = (a); \
^
resize.c:193:13: error: expected ';' after expression
resize.c:12:18: note: expanded from macro 'min'
typeof (b) _b = (b); \
^
resize.c:193:13: error: use of undeclared identifier '_b'
resize.c:12:18: note: expanded from macro 'min'
typeof (b) _b = (b); \
^
resize.c:193:13: error: use of undeclared identifier '_a'
resize.c:13:5: note: expanded from macro 'min'
_a < _b ? _a : _b; })
^
resize.c:193:13: error: use of undeclared identifier '_b'
resize.c:13:10: note: expanded from macro 'min'
_a < _b ? _a : _b; })
^
resize.c:193:13: error: use of undeclared identifier '_b'
resize.c:13:20: note: expanded from macro 'min'
_a < _b ? _a : _b; })
^
15 errors generated.