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 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#define add_five(n) (n + 5) // fixed by wrapping entire expression in parentheses
#define triple(n) ((n) * 3) // fixed by also wrapping each parameter in parentheses
int main(int argc, char* argv[]) {
printf("add_five(100)== %d\n", add_five(100) ); // print add_five(100) == 105
// Preprocessor will replace add_five(100) with 100 + 5
printf("add_five(100) * 20 == %d\n", add_five(100) * 20); // ⇒ (add_five(100) * 20) == 200
// Preprocessor will replace add_five(100) * 20 with (100 + 5) * 20
// OK
printf("triple(100) == %d\n", triple(100));
// FIXED
printf("triple(100 + 100) == %d // FIXED\n", triple(100 + 100));
// Preprocessor will replace triple(100 + 100) with (100 + 100 * 3)
// Expected 600 but will actually get 400.
return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2022 Alexander J. Quinn This content is protected and may not be shared, uploaded, or distributed.