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 40 41 42 43 44 | #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) {
_check_ratio(top, bottom, a_error); // GOOD
return (Fraction) { .top = top, .bottom = bottom };
}
bool check_ratio(int top, int bottom) { // just like how check_bmp(…)
return _check_ratio(top, bottom, NULL); // doesn't take a_error.
}
bool _check_ratio(int top, int bottom, const char** a_error) {
// When a_error is NULL, it means we don't care about the message.
bool is_error = (bottom == 0);
if(is_error && a_error != NULL) {
*a_error = "Denominator must not be 0.";
}
return is_error;
}
int main(int argc, char* argv[]) {
// Check ratio
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);
}
// Create Fraction object
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.