Documentando programas em C — tipos de comentário, boas práticas e comparação com Java
Comentários são trechos de texto inseridos no código-fonte que o compilador ignora completamente — eles existem apenas para os seres humanos que leem o código. Um bom comentário explica o porquê de uma decisão de programação, não simplesmente o que a linha faz (o código já mostra isso).
O comentário de linha começa com // e se estende até o final da linha. Tudo após o // naquela linha é ignorado pelo compilador. É o tipo mais comum para anotações rápidas e explicações curtas.
// texto ignorado até o final da linha
#include <stdio.h>
int main() {
int idade = 25; // idade do usuário em anos
float altura = 1.75; // altura em metros
float imc;
// Cálculo do IMC: peso / (altura ao quadrado)
imc = 70.0 / (altura * altura);
printf("IMC: %.2f\n", imc); // exibe com 2 casas decimais
return 0; // encerra o programa com sucesso
}
IMC: 22.86
O comentário de bloco começa com /* e termina com */. Pode se estender por quantas linhas forem necessárias. É o único tipo de comentário disponível no C original (antes de C99) e é amplamente usado para cabeçalhos de arquivo e documentação de funções.
/* texto comentado — pode ocupar várias linhas */*/ encontrado encerra o comentário, mesmo que haja outro /* dentro.
/*
* Programa: calculadora_basica.c
* Autor: João Silva
* Data: 2024-03-15
* Descrição: Demonstra as quatro operações aritméticas
* com entrada do usuário.
*/
#include <stdio.h>
/*
* Função: exibirResultado
* Parâmetros: op (char) - operador usado
* a, b (int) - operandos
* resultado (float) - resultado da operação
*/
void exibirResultado(char op, int a, int b, float resultado) {
printf("%d %c %d = %.2f\n", a, op, b, resultado); /* formatação padronizada */
}
int main() {
int x = 15, y = 4;
exibirResultado('+', x, y, x + y);
exibirResultado('-', x, y, x - y);
exibirResultado('*', x, y, x * y);
exibirResultado('/', x, y, (float)x / y); /* cast para divisão real */
return 0;
}
15 + 4 = 19.00
15 - 4 = 11.00
15 * 4 = 60.00
15 / 4 = 3.75
*/ encerra o comentário antes do esperado:
/* comentário externo /* interno */ ainda comentário? */
// O compilador vê: /* comentário externo /* interno */
// e depois tenta compilar: "ainda comentário? */" ← ERRO
Para comentar blocos que já contêm comentários, use comentários de linha // em cada linha, ou use diretivas de compilação condicional (#if 0 ... #endif).
Uma das utilizações práticas dos comentários é desabilitar temporariamente trechos de código durante o desenvolvimento, sem apagá-los. Isso é útil para testar alternativas ou isolar bugs.
int main() {
int x = 10;
// printf("Versão antiga: %d\n", x * 2); // desabilitada temporariamente
printf("Versão nova: %d\n", x * x); // versão atual
return 0;
}
Para comentar grandes blocos que já contêm comentários, a técnica mais segura em C é usar a diretiva de pré-processador #if 0:
#include <stdio.h>
int main() {
int x = 42;
#if 0
/* Este bloco inteiro é ignorado pelo compilador */
printf("Código antigo: %d\n", x);
/* outro comentário interno — sem problema aqui */
x = x * 2 + 1;
printf("Resultado antigo: %d\n", x);
#endif
printf("Resultado atual: %d\n", x); // apenas esta linha executa
return 0;
}
Resultado atual: 42
#if 0 ... #endif é o método preferido para comentar blocos grandes em C porque: (1) funciona mesmo que o bloco contenha comentários /* */, e (2) é fácil de encontrar e reativar — basta mudar #if 0 para #if 1.
Comentar bem é uma habilidade que se desenvolve com a prática. Veja a diferença entre comentários que agregam valor e comentários que apenas repetem o óbvio:
// incrementa i em 1 i++; // declara variável x do tipo int e atribui 5 int x = 5; // verifica se a é maior que b if (a > b) { // imprime "a é maior" printf("a é maior\n"); }
// Incrementa i para avançar ao próximo elemento do array
// (arrays em C não têm método .next() como em Java)
i++;
// Usa divisão inteira intencionalmente para descartar os centavos
int valor_em_reais = total_centavos / 100;
// Fórmula de Bhaskara — discriminante negativo indica raízes complexas
float delta = b*b - 4*a*c;
if (delta < 0) {
printf("Raízes complexas — sem solução real.\n");
return 1; // encerra com código de erro
}
// Buffer de leitura: +1 para o caractere nulo '\0' que termina strings em C
char nome[51]; // suporta até 50 caracteres + '\0'
Todo arquivo .c ou .h deve começar com um bloco de comentário descrevendo seu propósito:
/* * Arquivo: molecular_energy.c * Autor: Caio Lima Firme * Criado em: 2024-01-10 * Descrição: Cálculo de energia molecular usando o método * Hartree-Fock com base STO-3G. * * Compilar: gcc molecular_energy.c -o mol -lm */ #include <stdio.h> #include <math.h>
Para projetos maiores, é comum usar comentários no estilo Doxygen — uma ferramenta que lê comentários especialmente formatados e gera documentação HTML ou PDF automaticamente. O estilo usa /** (dois asteriscos) e tags especiais:
/**
* @brief Calcula a área de um círculo.
*
* Utiliza a fórmula: A = π × r²
* onde π é aproximado por PI_MACRO (3.14159).
*
* @param raio O raio do círculo em metros (deve ser positivo).
* @return A área em metros quadrados, ou -1.0 se raio <= 0.
*/
float areaCirculo(float raio) {
if (raio <= 0) return -1.0f;
return 3.14159f * raio * raio;
}
@brief — descrição curta da função@param nome — documenta um parâmetro@return — documenta o valor de retorno@note — observação adicional@warning — alerta ao usuário da função@see — referência a outra função relacionadaAs sintaxes de comentário são praticamente idênticas nas duas linguagens. A principal diferença está na ferramenta de documentação automática utilizada por cada ecossistema:
| Aspecto | C | Java |
|---|---|---|
| Comentário de linha | // texto (desde C99) |
// texto (idêntico) |
| Comentário de bloco | /* texto */ |
/* texto */ (idêntico) |
| Comentário de documentação | /** ... */ — processado pelo Doxygen |
/** ... */ — processado pelo Javadoc |
| Tags de documentação | @param, @return, @brief (Doxygen) |
@param, @return, @author (Javadoc) |
| Comentar blocos grandes | #if 0 ... #endif (método mais seguro) |
/* ... */ (funciona pois Java não tem pré-processador) |
Aninhamento de /* */ |
Não permitido — causa erro de compilação | Não permitido — causa erro de compilação |
// no C original (C89) |
Não existia — foi introduzido no C99 | Sempre disponível em Java |
| C | Java |
|---|---|
/*
* Calcula o quadrado de um número.
* @param n - número inteiro
* @return n ao quadrado
*/
int quadrado(int n) {
return n * n; // operação simples
}
|
/**
* Calcula o quadrado de um número.
* @param n número inteiro
* @return n ao quadrado
*/
int quadrado(int n) {
return n * n; // operação simples
}
|
Teste seus conhecimentos sobre comentários em C: