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 | #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "clog.h"
typedef struct {
int top, bottom; // YUK… not prohibited, but not great either
} Fraction;
Fraction make_fraction(int top, int bottom, const char** a_error) {
// BAD WAY
if(bottom == 0) { // BAD: duplicating logic about bottom
*a_error = "Denominator must not be 0.";
}
return (Fraction) { .top = top, .bottom = bottom };
}
bool check_ratio(int top, int bottom) {
return (bottom != 0); // DUPLICATED LOGIC!!!
}
int main(int argc, char* argv[]) {
int top = 5, bottom = 0; // icky
if(check_ratio(top, bottom)) {
printf("%d / %d is okay\n", top, bottom);
}
else {
log_red("%d / %d is NOT ALLOWED.\n", top, bottom);
}
const char* error = NULL;
Fraction frac_5_0 = make_fraction(5, 0, &error);
return EXIT_SUCCESS;
}
/* vim: set tabstop=4 shiftwidth=4 fileencoding=utf-8 noexpandtab: */
|
© Copyright 2019 Alexander J. Quinn This content is protected and may not be shared, uploaded, or distributed.