pitäisi saada tuonne SALLITTU kohtaan arvo väliltä 5...14. Kokeilin jo
#define SALLITTU 5
#define SALLITTU 5
Turvaa tilisi vahvistamalla puhelinnumerosi. Voit silloin palauttaa unohtuneen salasanan tekstiviestillä.
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 4
Vanhimmat
Määrittelet minimin ja maksimin erikseen:
#define SALLITTU_MIN 5
#define SALLITTU_MAX 14
mutta tuo on huono tapa. Parempi olisi käyttää vakiota;
const int SALLITTU_MIN = 5;
const int SALLITTU_MAX = 14;
ja tämä siksi, että edellinen on symbolinen vakio, jolle kääntäjä ei tee tyyppitarkistusta (siihen voi siis laittaa mitä tahansa soopaa). Jälkimmäisessä tapauksessa vakion tyyppi on määritelty, eikä se mene kääntäjästä läpi ilman että vakiolle on määritelty oikean tyyppinen arvo.
OK
Jos #definen käyttö on huono tapa niin jopas on maailmassa paljon huonotapaisia C-ohjelmoijia, jopa arvostettuja ammattilaisia!
Esittämässäsi "paremmassa tavassa" ei ainakaan tässä tapauksessa ole mitään "parempaa". Päinvastoin, kääntäjä tekee koodistasi vain tehottomamman ja suuremman jos siellä on käytetty vakioita (const) #definen sijaan.
#definellä määritellyille vakioille tehdään toki tyyppitarkastus, ei tietenkään esikäännösvaiheessa, mutta osana koodia, esimerkiksi:
if (luku < SALLITTU_MIN || luku > SALLITTU_MAX) ...
Lisävarmuutta voi joihinkin tilanteisiin hakea tähän tapaan:
#define SALLITTU_MIN ((luku_t) 5)
#define SALLITTU_MAX ((luku_t) 14)
Höh! Enpäs tullut ajatelleeksi asiaa sen tarkemmin. Mutta maailmassa todella on HYVIN PALJON huonotapaisia ohjelmoijia, allekirjoittanut mukaan lukien. Sitä se helppo elämä Javan parissa teettää :)