Αντίθετα, μιας και μιλάμε για if-else, κάτι που είναι ιδιαίτερα πρακτικό & χρήσιμο είναι η χρήση δικών μας pre-processor directives που να μας επιστρέφουν την μεγαλύτερη ή/και την μικρότερη ανάμεσα σε 2 τιμές...
-
Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#define myMIN(x,y) ( (x) < (y) ? (x) : (y) )
#define myMAX(x,y) ( (x) > (y) ? (x) : (y) )
Μια πολύ συνηθισμένη χρήση τους είναι όταν θέλουμε να διορθώνουμε αυτόματα το indexing πινάκων, ώστε να μην ξεφεύγει από τα όρια του πίνακα. Ή ακόμα και σε άλλες απλές περιπτώσεις όπως η παρακάτω.
Ας πούμε για παράδειγμα πως έχουμε ένα σημείο (χ,y) και ζητάμε από την χρήστη να μας δώσει πλάτος w ώστε να δημιουργήσουμε ένα τετράγωνο, με την πάνω αριστερή γωνία του στο σημείο (x,y). Καμβάς είναι οθόνη μας, ξεκινώντας από το σημείο (0,0) στην πάνω αριστερή γωνία της. Έχουμε επίσης περιορισμό στο μέγιστο πλάτος( W_MAX) που μπορεί να έχει οποιοδήποτε από τα τετράγωνα που διαχειρίζεται το πρόγραμμά μας...
-
Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#include <stdio.h>
#include <myextras.h>
#define W_MAX 300 /* in pixels */
#define myMIN(x,y) ( (x) < (y) ? (x) : (y) )
int main( void )
{
int x = 20, y = 10, w = 0;
printf( "Enter width for square starting at (%d,%d): ", x, y );
mySCANF( "%d", &w );
w = ( w < x ) ? x : myMIN(w, W_MAX);
...
return 0;
}
Ο απλός αυτός κώδικας κάνει auto-fix την τιμή του δοθέντος w είτε σε x αν ήταν μικρότερη από x, είτε σε W_MAX αν ήταν μεγαλύτερη από W_MAX. Αλλιώς την αφήνει όπως δόθηκε.