Qual ' é a diferença entre #define e const int ao declarar um pino? [duplicar]

Esta pergunta já tem respostas aqui :

Comentários

  • Acho que você quer dizer #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.
  • @MikaelPatel exatamente … então basicamente o int o método é melhor, certo?
  • Sim. Atualize o título e remova " include ". Isso é algo totalmente diferente e não relacionado 🙂
  • Eu geralmente prefiro usar enum para constantes inteiras ou de caracteres em vez de #define ou const int. Veja a resposta aceita para É melhor usar #define ou const int para constantes? ,

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”).

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *