1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> // gives us bool (type), true (constant), false (constant)
#include <assert.h>
// BROKEN
#define dbg_print_int_if_even(n) \
do { \
if((n) % 2 == 0) { \
printf("%s == %d\n", (#n), (n)); \
} \
} while(false) // <<< IMPORANT: We do NOT use a semicolon at the end of this.
int main(int argc, char* argv[]) {
for(int i = 0; i < 10; i++) {
dbg_print_int_if_even(i);
}
return EXIT_SUCCESS;
}
/*
b.c: In function ‘main’:
b.c:13:10: error: ‘false’ undeclared (first use in this function); did you mean ‘fclose’?
} while(false) // <<< IMPORANT: We do NOT use a semicolon at the end of this.
^~~~~
b.c:17:3: note: in expansion of macro ‘dbg_print_int_if_even’
dbg_print_int_if_even(i);
^~~~~~~~~~~~~~~~~~~~~
b.c:13:10: note: each undeclared identifier is reported only once for each function it appears in
} while(false) // <<< IMPORANT: We do NOT use a semicolon at the end of this.
^~~~~
b.c:17:3: note: in expansion of macro ‘dbg_print_int_if_even’
dbg_print_int_if_even(i);
^~~~~~~~~~~~~~~~~~~~~
shell returned 1
*/
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2023 Alexander J. Quinn This content is protected and may not be shared, uploaded, or distributed.