Mikä ' ero #define ja const int välillä ilmoitettaessa nasta? [kaksoiskappale]

Tähän kysymykseen on jo annettu vastauksia :

Kommentit

  • Tarkoitan tarkoittavan #define sijasta #include. Ammattimaisempi tapa nastojen ilmoittamiseksi on const int myPin = .... Tämä auttaa kääntäjää ymmärtämään, että se on vakioarvo eikä tallennusta tarvita. Tämä on hieman parempi kuin #define, koska se antaa koontitiedot tietotyypistä.
  • @MikaelPatel tarkalleen … joten pohjimmiltaan int -menetelmä on parempi?
  • Kyllä. Päivitä otsikko ja poista " include ". Se on jotain täysin erilaista eikä ole yhteydessä toisiinsa 🙂
  • Käytän yleensä parempana enum -merkkiä kokonaisluku- tai merkkivakioihin eikä joko #define tai const int. Katso hyväksytty vastaus kysymykseen Onko vakioille parempi käyttää #define tai const int? ,

vastaus

”#define” on esikäsittelydirektiivi. Se määrittelee lable-arvon ja arvon, joka sijoitetaan esikäsiteltyyn lähdekoodiin samaan paikkaan jokaisessa tarran esiintymässä. Mitään tyyppiä ei ole määritelty, joten se on merkkijonojen perus- ja tyhmäkorvaus ennen kokoamista. Sitten se voi johtaa virheisiin tai väärinkäsityksiin kääntämisen aikana.

”const int xxx” määrittelee tyypin ja lukitsee kyseisen ilmentymän arvon. Tämän menetelmän käyttäminen on turvallisempaa. Kääntäjä voi tarkistaa tyypin virheet ja heittää viestejä (tai rikkoa kokoelman), jos teit virheen.

Esimerkki:

#define A 5 int dummy_integer = A 

… esikäsitellään muodossa …

int dummy_integer = 5 

… ja kääntäjä lukee tämän lauseen.

Jos muistan kuitenkin hyvää, voit aina korvata esikäsittelydirektiivin seuraavasti:

#define A 5 int dummy_integer = A //some code here #undef A #define A "my_string" std::cout << A 

Se ei ole hyvä. Käyttämällä muuttujaa ”const” sen sijaan et voi muuttaa muuttujan arvoa (eikä tyyppiä) (ja siten se määrittelee ”vakion”).

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *