Jaký je ' rozdíl mezi #define a const int při deklaraci špendlíku? [duplicate]

Tato otázka již má odpovědi zde :

Komentáře

  • Myslím, že máte na mysli #define místo #include. Profesionálnější způsob deklarace pinů je const int myPin = ... To kompilátoru pomáhá pochopit, že se jedná o konstantní hodnotu a úložiště se nevyžaduje. To je o něco lepší než #define, protože poskytuje kompilační informace o datovém typu.
  • @MikaelPatel přesně … takže v zásadě int metoda je lepší, že?
  • ano. Aktualizujte název a odeberte " zahrnout ". To je něco úplně jiného a nesouvisejícího 🙂
  • Obvykle dávám přednost použití enum pro celočíselné nebo znakové konstanty spíše než #define nebo const int. Viz přijatá odpověď na Je lepší použít pro konstanty #define nebo const int? ,

odpověď

„#define“ je preprocesorová směrnice. Definuje označení a hodnotu, která bude umístěna v předzpracovaném zdrojovém kódu na stejném místě každého výskytu štítku. Není definován žádný typ, takže se jedná o základní a hloupé nahrazení řetězců před kompilací. To pak může vést k chybám nebo nedorozuměním během kompilace.

„const int xxx“ definuje typ a uzamkne hodnotu dané instance. Je bezpečnější použít tuto metodu. Kompilátor může zkontrolovat chyby typu a vyhodit zprávy (nebo přerušit kompilaci), pokud jste udělali chybu.

Příklad:

#define A 5 int dummy_integer = A 

… bude předzpracováno jako …

int dummy_integer = 5 

… a překladač toto prohlášení přečte.

Pokud si ale dobře pamatuji, můžete vždy přepsat direktivu preprocesoru takto:

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

To není dobré. Použitím modifikátoru „const“ místo toho nemůžete „změnit hodnotu (ani typ) proměnné (a tedy„ definované “konstanty).

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *