Um catálogo de erros de compilação em C e como corrigi-los — seu guia completo para ler mensagens de erro do gcc.
error: no formato arquivo:linha: error: mensagem.; ausente no final de uma instrução. Verifique a linha imediatamente acima da linha reportada.int x = 10 // ← sem ; aqui printf("%d", x); // ← erro reportado aqui
() desbalanceados. Conte com cuidado os que fecham.printf("x=%d\n", x; // ← falta ) printf("x=%d\n", x); // ← OK
int x = 10; // ← espaço de largura completa entre = e 10! int x = 10; // ← OK (espaço de largura normal)
{} desbalanceadas em volta do if, deixando o else órfão.if (x > 0) { printf("positive\n"); }} // ← uma } a mais -> else órfão else { ... }
count → cont)#include ausente (por exemplo, printf fica undeclared sem <stdio.h>)
int x = "hello"; // Errado: atribuindo string a int int x = 42; // OK
int add(int a, int b) { return a+b; } add(1); // Errado: poucos (precisa 2, passou 1) add(1,2,3); // Errado: muitos (precisa 2, passou 3) add(1,2); // OK
void greet() { printf("Hi\n"); } int r = greet(); // Errado: void não tem valor de retorno
undefined reference em vez de error:.main. Confirme que seu arquivo tem int main(void). A caixa (maiúscula/minúscula) importa — Main não é o mesmo que main.-lm.// Errado gcc program.c -o program // OK: adicione -lm no final gcc program.c -o program -lm
-Wall.gcc -Wall program.c -o program // mostra todos os avisos
#include <stdio.h>.double pi = 3.14; printf("%d\n", pi); // Errado: use %f para double printf("%f\n", pi); // OK
return.int max(int a, int b) { if (a > b) return a; // sem return no ramo else! }
= (atribuição) dentro de um if. Quis dizer ==?if (x = 5) // aviso! isso é atribuição if (x == 5) // OK: comparação
R. De longe, a mais comum é um ponto e vírgula ausente (;). Depois vêm parênteses desbalanceados e caracteres de largura completa se infiltrando no código-fonte. Ao ler mensagens de erro, sempre verifique também a linha anterior à que a mensagem aponta.
R. Mensagens de erro seguem o formato "arquivo:linha: error: mensagem". (1) Verifique o nome do arquivo e o número da linha e (2) leia a descrição depois de "error". Se a descrição for difícil de entender, colar a mensagem inteira em uma busca na web funciona muito bem.
R. Um error interrompe a compilação e precisa ser corrigido. Um warning deixa a compilação prosseguir, mas sinaliza um problema potencial. Em desenvolvimento profissional, corrigir avisos é prática padrão.
R. O erro indica que uma variável ou função não foi declarada. Correções comuns: (1) adicionar um #include ausente, (2) declarar a variável antes de usá-la, ou (3) verificar a ortografia. Esquecer stdio.h, em particular, é muito comum.
Confira seu entendimento.
Ocorre quando a variável ou função usada nunca foi declarada. Erros de digitação e um #include ausente também são causas comuns.
O compilador muitas vezes reporta o erro na linha depois do ponto e vírgula ausente. Sempre verifique também as linhas ao redor.
Um error interrompe a compilação; um warning não. Mas você ainda deve corrigir os warnings.