Chaves são elementos principais da linguagem de programação C. Elas são usadas em diversas construções diferentes, como as destacadas abaixo, e algumas vezes podem ser confusas para os iniciantes.
Uma chave aberta "{" sempre deve ser seguida de uma chave fechada "}". Esta é uma condição que é comumente mencionada para que as chaves sejam balanceadas. A IDE (Integrated Development Environment) do Arduino inclui um recurso conveniente para verificar o balanço das chaves. Selecione uma chave ou clique no ponto de inserção imediatamente após uma delas e sua companheira lógica será destacada.
No momento, este recurso está com alguns probleminhas porque a IDE sempre irá encontrar (incorretamente) uma chave no texto, mesmo que tenha sido "comentada".
Programadores iniciantes e programadores que chegam à linguagem C vindos do BASIC, geralmente se sentem confusos ou intimidados pelas chaves. Isto porque, a mesma chave substitui a declaração RETURN em uma subrotina (função), a declaração ENDIF em uma condicional e o comando NEXT em um loop FOR.
Por conta do uso das chaves ser tão variado, uma boa prática de programação é digitar a chave de fechamento imediatamente após digitar a chave de abertura ao inserir uma construção que requer o uso de chaves e então, inserir alguns retornos-de-carro (ENTER) entre suas chaves e iniciar a inserção de comandos ou declarações. Deste modo, suas chaves e sua atitude nunca serão problemáticas.
Chaves não-balanceadas podem levar a erros críticos e inpenetráveis ao compilador, que podem ser difíceis de se rastrear em um grande programa. Por causa de seus vários usos, as chaves são também incrivelmente importantes para a sintaxe de um programa, e mover uma chave, uma ou duas linhas, geralmente afetará dramaticamente o significado de um programa
void minhafuncao(tipo_de_dado argumento){ comando(s) }
while (expressão booleana) { comando(s) } do { comando(s) } while (expressão booleana); for (inicialização; condição de término; expressão de incremento/decremento) { comando(s) }
if (expressão booleana) { comando(s) } else if (expressão booleana) { comando(s) } else { comando(s) }