Wat is ' is het verschil tussen #define en const int bij het declareren van een pin? [duplicate]

Deze vraag heeft hier al antwoorden :

Reacties

  • Ik denk dat je bedoelt #define in plaats van #include. De meer professionele manier om pinnen te declareren is const int myPin = ... Dit helpt de compiler te begrijpen dat het een constante waarde is en dat opslag niet vereist is. Dit is iets beter dan #define aangezien het de compileerinformatie geeft over het gegevenstype.
  • @MikaelPatel precies … dus eigenlijk de int methode is beter toch?
  • Ja. Werk de titel bij en verwijder " include ". Dat is iets totaal anders en niet gerelateerd 🙂
  • Ik gebruik meestal enum voor integer- of tekenconstanten in plaats van #define of const int. Zie geaccepteerd antwoord op Is het beter om #define of const int te gebruiken voor constanten? ,

Antwoord

“#define” is een preprocessor-instructie. Het definieert een label en een waarde, die in de voorverwerkte broncode op dezelfde plaats van elk voorkomen van het label worden geplaatst. Er is geen type gedefinieerd, dus het is een eenvoudige en domme vervanging van strings vóór compilatie. Het kan dan leiden tot fouten of misverstanden tijdens het compileren.

“const int xxx” definieert een type en vergrendelt de waarde van die instantie. Het is veiliger om deze methode te gebruiken. De compiler kan controleren op typefouten en berichten genereren (of compilatie breken) als je een fout hebt gemaakt.

Voorbeeld:

#define A 5 int dummy_integer = A 

… zal worden voorverwerkt als …

int dummy_integer = 5 

… en de compiler zal deze instructie lezen.

Als ik het me echter goed herinner, kun je een preprocessor-instructie altijd als volgt overschrijven:

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

Dat is niet goed. Door in plaats daarvan de “const” modifier te gebruiken, kunt u “de waarde (noch het type) van een variabele veranderen (en dus wordt het gedefinieerd als” constant “).

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *