
Const int arduino
Constante float arduino
Aqui veremos quais são as diferenças entre int e const_int& em C ou C++. O int é basicamente o tipo de dados do tipo inteiro. E const é usada para fazer algo constante. Se houver int& constante, então indica que esta conterá a referência de alguns dados do tipo int. Este valor de referência é constante em si. Portanto, a constante é redundante. O compilador pode retornar aviso ou algum erro. A const int& é a mesma que int const&. Portanto, isto se refere a um número inteiro constante. O número inteiro não pode ser modificado através da referência.
Const arduino
#define instrui o pré-processador a substituir ‘2’ onde quer que ele veja “PinA_esquerda”. É isso aí. Quando você usa “const int left_L2” o compilador atribui dois bytes de RAM e coloca lá o valor 0x0006. Sempre que você referir “left_L2” esse endereço é referenciado como um número inteiro.
Mas como é apenas uma cópia colada, você precisa ter cuidado com seu uso, especialmente quando a definição é algo onde, digamos, um cálculo ou outra operação similar é feita e/ou são múltiplas linhas. Por exemplo, se você tem uma macro que abrange múltiplas linhas de código, ou interage com outro código, você precisa ser muito criterioso quanto ao uso de parênteses para garantir que a estrutura de expressão resultante após a substituição seja a esperada.
Muitas vezes o compilador determinará que não há necessidade de atribuir nenhuma RAM para a constante, e em vez disso substitui o valor constante diretamente no código de forma similar ao #define. Uma diferença distinta é que com a constante há também uma declaração do tipo (int neste caso), portanto o compilador verifica o tipo correto a cada uso.
Feedback
Se você quiser que o compilador capture tentativas inválidas de escrever para uma variável, faça-o constante. Se a variável precisar ser escrita, como uma que é legitimamente usada à esquerda de um sinal de igual, então ela não deve ser constante.
@KeithRB: O exemplo da AWOL não é realmente o uso de um ponteiro. Um verdadeiro item de dados tem um valor (um endereço onde vive na memória) e um valor (o que está contido nesse endereço). Declarações simples de atribuição:
O exemplo da AWOL simplesmente coloca o endereço do operador (&) na frente da variável para dizer ao compilador para não usar o valor do item de dados, mas sim o valor na chamada para o objeto Serial. Não tem nada a ver com apontadores.
Também deve ser assinalado que um #define não tem tipificação, enquanto uma constante está sempre ligada por sua definição a um tipo de dado. Enquanto um #define desiste da segurança da verificação do tipo, há alguns casos em que isto pode tornar uma estrutura de dados mais flexível.
@KeithRB: O exemplo da AWOL não é realmente a utilização de um ponteiro. Um verdadeiro item de dados tem um lvalue (um endereço onde vive na memória) e um rvalue (o que está contido nesse endereço). Declarações simples de atribuição:
Duplo-pr… formato de ponto flutuante…
Você usa “const int” se quiser referenciar um valor pelo nome – você o usa como qualquer int comum, mas não pode alterar o valor. Isto não usa nenhuma RAM. O valor é usado como o valor real onde quer que seja referenciado, da mesma forma que #define.
Você pode usar #define onde você usaria “const int”, mas falta-lhe o tipo de fundição forte do “const int”. O melhor é usar #define para a compilação opcional de blocos de código (combinado com #if, #ifdef, etc.).
Se você adicionar qualificadores de elenco ao valor de um #define, então é exatamente o mesmo que usar uma “const int”. O compilador produzirá um código que é, se não idêntico, pelo menos próximo o suficiente para ser indistinguível pelo mortal médio 😉
Eu pergunto, bc eu notei algo disso, ao tentar fazer minha própria função digitalWrite, onde eu chamei a função dW() então eu pensei, agora o código ao invés de ter 100 chamadas para “digitalWrite” terá 100 chamadas para “dW” então eu estou escrevendo menos bytes, mas eu percebi que não funciona dessa maneira 😛