Comentários
Resposta
“#define” é uma diretiva do pré-processador. Define uma etiqueta e um valor, que serão posicionados no código-fonte pré-processado no mesmo local de cada ocorrência da etiqueta. Nenhum tipo é definido, então é uma substituição básica e estúpida de strings antes da compilação. Isso pode levar a erros ou mal-entendidos durante a compilação.
“const int xxx” define um tipo e bloqueia o valor dessa instância. É mais seguro usar este método. O compilador pode verificar se há erros de tipo e lançar mensagens (ou interromper a compilação) se você cometer um erro.
Exemplo:
#define A 5 int dummy_integer = A
… será pré-processado como …
int dummy_integer = 5
… e o compilador lerá esta instrução.
No entanto, se bem me lembro, você sempre pode sobrescrever uma diretiva de pré-processador da seguinte maneira:
#define A 5 int dummy_integer = A //some code here #undef A #define A "my_string" std::cout << A
Isso não é bom. Ao usar o modificador “const”, em vez disso, você não pode alterar o valor (nem o tipo) de uma variável (e por isso é definida como “constante”).
#define
em vez de#include
. A forma mais profissional de declarar pinos éconst int myPin = ...
. Isso ajuda o compilador a entender que é um valor constante e que não é necessário armazenamento. Isso é um pouco melhor do que#define
, pois fornece informações de compilação sobre o tipo de dados.int
o método é melhor, certo?enum
para constantes inteiras ou de caracteres em vez de#define
ouconst int
. Veja a resposta aceita para É melhor usar #define ou const int para constantes? ,