C Instalar no Windows e macOS
O Windows e o macOS não vêm com um compilador de C, mas instalar um é questão de minutos. No Windows há três caminhos: o MSYS2, que traz o mesmo gcc do guia; o WSL, um Linux de verdade dentro do Windows; e o Visual Studio, o ambiente da Microsoft. No macOS, um único comando instala as ferramentas da Apple, com uma surpresa: o gcc do Mac é, na verdade, o Clang. Nesta aula você vai escolher o seu caminho, instalar e conferir.
- Os três caminhos no Windows e qual escolher: MSYS2 (gcc), WSL (Linux) e Visual Studio (MSVC).
- Como instalar o gcc pelo MSYS2 e usá-lo no PowerShell.
- Como compilar C no Visual Studio e o que muda no compilador da Microsoft.
- Como instalar as ferramentas da Apple com
xcode-select --install, e por que ogccdo Mac é o Clang. - Como instalar o GCC de verdade no Mac pelo Homebrew.
- Os erros mais comuns de cada sistema, como os acentos que viram
Olá.
A máquina do guia é um Linux, então os comandos desta aula não puderam ser rodados nela. As telas de Windows e macOS seguem a documentação oficial de cada ferramenta e estão marcadas como ilustrativas: os números de versão e os detalhes podem variar no seu computador. As saídas marcadas com o terminal da Ana (ana@notebook) são reais. Se você usa Linux, a aula certa é Instalar no Linux.
A ideia: um tradutor para cada país
Imagine que a Ana escreveu uma receita em português e quer que cozinheiros de três países a sigam. Ela precisa de um tradutor para cada país: a receita é a mesma, mas cada cozinheiro só entende a própria língua.
Com o C é igual. O seu ola.c é a receita. O compilador é o tradutor, que transforma o texto em instruções que um sistema entende. Windows, macOS e Linux "falam" de jeitos diferentes, e por isso cada um precisa do seu compilador. Nesta aula você instala o tradutor do seu sistema; a receita (o código das aulas) continua a mesma.
Antes de tudo: o terminal
O guia compila os programas pelo terminal (a janela de texto onde você digita comandos), porque assim você vê exatamente o que acontece. Cada sistema tem o seu:
| Sistema | Terminal | Como abrir |
|---|---|---|
| Windows | Terminal do Windows (com PowerShell) ou o terminal do MSYS2 | Menu Iniciar → digite "Terminal" (ou "MSYS2 UCRT64") |
| macOS | Terminal | Cmd+Espaço → digite "Terminal" |
Depois, se preferir, você pode compilar com um botão dentro de um editor (aula Editores e IDEs). Mas saber o comando ajuda a entender o que o botão faz, e a resolver os problemas quando o botão falha.
Windows
Qual caminho escolher?
| Caminho | O que você ganha | Tamanho | Bom para |
|---|---|---|---|
| 1. MSYS2 (gcc do MinGW-w64) | O mesmo gcc do Linux e do guia, com as mesmas opções e mensagens. Gera programas .exe normais do Windows. | Algumas centenas de MB | Seguir o guia com o VS Code ou outro editor. É o caminho recomendado. |
| 2. WSL | Um Ubuntu de verdade dentro do Windows: tudo o que o guia mostra funciona igualzinho, inclusive make, gdb, valgrind, fork e threads. | Alguns GB | Quem quer o ambiente exatamente igual ao do guia, principalmente no Nível 3. |
| 3. Visual Studio Community | O compilador da Microsoft (MSVC) e um ambiente completo, com depurador visual. | Vários GB | Quem já usa o Visual Studio ou vai programar para Windows. Para aprender C, é o menos indicado dos três (veja por quê lá embaixo). |
Não precisa escolher um só: muita gente tem o MSYS2 e o WSL no mesmo computador.
Caminho 1: MSYS2, passo a passo
O MSYS2 é um pequeno "mundo Linux" para Windows: um terminal e um gerenciador de pacotes, o pacman (o mesmo do Arch Linux), de onde você instala o MinGW-w64, o GCC adaptado para gerar programas do Windows.
- Entre em msys2.org e baixe o instalador (um arquivo como
msys2-x86_64-20260927.exe; a data no nome muda). É preciso Windows 10 ou 11, de 64 bits. - Rode o instalador e aceite a pasta sugerida,
C:\msys64. Clique em Avançar até o fim e depois em Concluir. - Abre-se um terminal chamado MSYS2 UCRT64 (se não abrir, procure por ele no menu Iniciar). UCRT64 é o "ambiente" recomendado: programas de 64 bits, usando a biblioteca do C moderna do Windows (a Universal C Runtime).
- Nesse terminal, instale o kit completo (gcc, gdb, make e companhia):
pacman -S mingw-w64-ucrt-x86_64-toolchain
- O
pacmanpergunta quais itens do kit você quer (tecle Enter para "todos") e depois mostra a lista de pacotes e pergunta:: Proceed with installation? [Y/n]("continuar com a instalação?"). Tecle Enter de novo. - Confira:
$ gcc --version gcc.exe (Rev6, Built by MSYS2 project) 16.2.0 Copyright (C) 2026 Free Software Foundation, Inc. ...
- pacman
- O gerenciador de pacotes do MSYS2.
- -S
- Sync: baixar e instalar.
- mingw-w64-ucrt-x86_64-toolchain
- O nome do pacote: o kit de ferramentas (
toolchain) do MinGW-w64 (mingw-w64), para o ambiente UCRT64 (ucrt), em processadores de 64 bits (x86_64). Se quiser só o compilador, o pacote émingw-w64-ucrt-x86_64-gcc.
Duas diferenças do MSYS2 para o Linux do guia: o make do kit se chama mingw32-make (o nome é antigo, mas ele gera programas de 64 bits normalmente), e as aulas do Nível 3 sobre processos (fork), sinais e Valgrind são coisas do Linux; para elas, use o WSL. Para atualizar tudo: pacman -Syu.
Usar o gcc fora do terminal do MSYS2
O gcc funciona dentro do terminal UCRT64. Para usá-lo também no PowerShell, no Terminal do Windows e no VS Code, acrescente a pasta dele ao PATH (a lista de pastas onde o Windows procura programas):
- Menu Iniciar → digite variáveis de ambiente → "Editar as variáveis de ambiente para sua conta".
- Selecione Path → Editar → Novo → digite
C:\msys64\ucrt64\bin→ OK em todas as janelas. - Feche e abra de novo o terminal (o PATH só é lido quando o terminal abre) e confira com
gcc --version.
Compilar no Windows
O comando é o mesmo do guia. A diferença é que o executável ganha a extensão .exe sozinho, e, no PowerShell, você roda o programa com .\ em vez de ./:
PS C:\Users\Ana\c> gcc -std=c23 -Wall -Wextra ola.c -o ola PS C:\Users\Ana\c> .\ola.exe Olá, mundo!
Se em vez de Olá aparecer Olá, não se assuste: é um problema de acentos do console do Windows, e a solução está em Quando dá errado.
Caminho 2: WSL, um Linux dentro do Windows
O WSL (Windows Subsystem for Linux, "subsistema Windows para Linux") roda um Linux de verdade ao lado do Windows, sem máquina virtual para configurar. Com ele, tudo o que o guia mostra no terminal funciona igual, do primeiro programa ao Valgrind.
- Abra o Terminal (ou PowerShell) como administrador: clique com o botão direito no menu Iniciar → "Terminal (Administrador)".
- Digite:
wsl --install
Esse comando instala o WSL e o Ubuntu. Reinicie o computador quando ele pedir. - Depois de reiniciar, abra o Ubuntu no menu Iniciar. Na primeira vez, ele pede um nome de usuário e uma senha para o Linux (não precisam ser os do Windows).
- Pronto: você está num terminal Ubuntu. Siga a aula Instalar no Linux:
sudo apt updateesudo apt install build-essential gdb.
Os arquivos do Windows aparecem dentro do Linux em /mnt/c/ (o disco C:). Mas, para compilar mais rápido, guarde os seus programas na pasta pessoal do Linux (~/c). O VS Code abre essa pasta direto com a extensão WSL (aula Editores e IDEs).
Caminho 3: Visual Studio Community
O Visual Studio (não confunda com o VS Code, que é só um editor) é o ambiente completo da Microsoft, e a edição Community é gratuita para estudantes, uso pessoal e equipes pequenas. O compilador dele, o MSVC, foi feito pensando principalmente em C++: ele compila C, mas só ganhou suporte ao C11 e ao C17 em 2020, e o C23 ainda está chegando aos poucos. Por isso, para seguir este guia, prefira o MSYS2 ou o WSL. Se mesmo assim quiser usá-lo:
- Baixe o instalador em visualstudio.microsoft.com (Visual Studio Community) e rode-o.
- Na tela Cargas de trabalho, marque Desenvolvimento para desktop com C++. É ela que traz o compilador (que serve para C e para C++), as bibliotecas do Windows e o depurador.
- Clique em Instalar. São vários gigabytes: pode demorar.
- O Visual Studio não tem um modelo de projeto "C". Crie um Projeto Vazio (de C++), clique com o botão direito em Arquivos de Origem → Adicionar → Novo Item, e dê ao arquivo um nome terminado em
.c, comoola.c. A extensão é o que faz o Visual Studio compilar como C (com.cpp, ele compila como C++). - Para escolher a versão do C: Projeto → Propriedades → C/C++ → Linguagem → Padrão da Linguagem C → escolha o mais recente.
- Para compilar e rodar: Ctrl+F5 (Iniciar Sem Depuração).
O compilador também funciona no terminal: abra o Developer PowerShell for VS (instalado junto, no menu Iniciar) e use o comando cl. As opções têm outra forma (ilustrativo):
cl /std:c17 /W4 ola.c .\ola.exe
- cl
- O compilador da Microsoft (de compile and link, compilar e ligar).
- /std:c17
- A versão do C, como o
-std=do gcc. As versões novas do Visual Studio também aceitam/std:clatest, a mais nova que ele conhece. - /W4
- Nível 4 de avisos: o equivalente aproximado do
-Wall -Wextra. - ola.c
- O arquivo. Com a extensão
.c, oclcompila como C. O executável sai com o mesmo nome:ola.exe.
As mensagens de erro do MSVC são diferentes das do gcc e do Clang (têm códigos como C2143), mas dizem a mesma coisa. E ele tem uma mania que confunde quem está aprendendo: reclama de funções padrão do C, como o scanf, e sugere versões só da Microsoft (veja Quando dá errado).
macOS
No Mac, o compilador "oficial" é o Clang da Apple, que vem nas Command Line Tools (as "ferramentas de linha de comando" do Xcode). Você não precisa instalar o Xcode inteiro, que é enorme: as ferramentas bastam.
1. Command Line Tools: xcode-select --install
- Abra o Terminal e digite:
xcode-select --install
- Uma janela pergunta se você quer instalar as ferramentas de linha de comando. Clique em Instalar e aceite a licença. O download leva alguns minutos.
- Confira:
% clang --version Apple clang version 17.0.0 (clang-1700.3.19.1) Target: arm64-apple-darwin25.0.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
O arm64 na linha Target indica um Mac com chip Apple (M1, M2, M3…); num Mac antigo, com Intel, aparece x86_64. O % no começo da linha é o prompt do Terminal do macOS (o shell zsh), no papel do $ do Linux. As ferramentas também trazem o make e o depurador lldb.
No Mac, o gcc é o Clang disfarçado
As Command Line Tools também instalam um comando chamado gcc. Mas veja o que ele responde (ilustrativo):
% gcc --version Apple clang version 17.0.0 (clang-1700.3.19.1) Target: arm64-apple-darwin25.0.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
É a mesma resposta do clang: no Mac, gcc é só um atalho para o Clang da Apple, mantido para que scripts e Makefiles antigos que chamam gcc continuem funcionando. Para o guia, isso não é problema: as opções principais são as mesmas, e você pode digitar os comandos das aulas como estão. Só não estranhe se as mensagens de erro no seu Mac se parecerem mais com as do editor do guia (que também usa o Clang) do que com as do terminal da Ana. Compile e rode exatamente como no Linux:
% gcc -std=c23 -Wall -Wextra ola.c -o ola % ./ola Olá, mundo!
Se o seu Apple clang for mais antigo e reclamar de -std=c23, use -std=c2x, o nome antigo da mesma versão (aula Versões do C).
Nos Macs com chip Apple, o gdb e o Valgrind não funcionam. As aulas que usam essas ferramentas têm equivalentes no Mac: o lldb (o depurador do projeto LLVM, que vem nas Command Line Tools) no lugar do gdb, e os sanitizers (-fsanitize=address), que o Clang da Apple aceita, no lugar do Valgrind.
2. Opcional: o GCC pelo Homebrew
Se você quiser o mesmo compilador do guia (o GCC de verdade), instale-o pelo Homebrew, o gerenciador de pacotes mais usado no Mac:
- Instale o Homebrew, se ainda não tiver, com o comando que está na página brew.sh (copie de lá; ele começa com
/bin/bash -c "$(curl -fsSL …)"). No fim, o instalador mostra dois ou três comandos para colar no Terminal: cole-os, eles colocam obrewno PATH. - Instale o GCC:
brew install gcc
- O Homebrew não ocupa o nome
gcc(que é o Clang da Apple): o GCC vem com o número da versão no nome (ilustrativo):% gcc-16 --version gcc-16 (Homebrew GCC 16.2.0) 16.2.0 ... % gcc-16 -std=c23 -Wall -Wextra ola.c -o ola % ./ola Olá, mundo!
Nos comandos do guia, troque gcc por gcc-16 (ou pelo número que o seu Homebrew instalou). Para atualizar: brew upgrade gcc.
Testando: o mesmo programa nos três sistemas
Seja qual for o caminho, o teste é o mesmo: o ola.c e o teste23.c da aula Instalar no Linux. Os comandos lado a lado:
| Sistema e caminho | Compilar | Rodar |
|---|---|---|
| Linux, WSL | gcc -std=c23 -Wall -Wextra ola.c -o ola | ./ola |
| Windows, MSYS2 (terminal UCRT64) | gcc -std=c23 -Wall -Wextra ola.c -o ola | ./ola (ou ./ola.exe) |
| Windows, MSYS2 (PowerShell) | gcc -std=c23 -Wall -Wextra ola.c -o ola | .\ola.exe |
| Windows, Visual Studio | Ctrl+F5, ou cl /std:c17 /W4 ola.c | (abre sozinho) ou .\ola.exe |
| macOS, Command Line Tools | gcc -std=c23 -Wall -Wextra ola.c -o ola (é o Clang) | ./ola |
| macOS, Homebrew | gcc-16 -std=c23 -Wall -Wextra ola.c -o ola | ./ola |
Um detalhe importante: o executável de um sistema não roda no outro. O ola.exe do Windows não abre no Mac, e o ola do Linux não abre no Windows. O código-fonte é o mesmo; o programa precisa ser compilado em cada sistema (a aula Como o C Vira Programa explica por quê).
Enquanto a instalação não termina, rode o programa abaixo no editor do guia. Ele usa o pré-processador para descobrir para qual sistema foi compilado: cada compilador define um nome diferente (_WIN32 no Windows, __APPLE__ no Mac, __linux__ no Linux), e o #if escolhe a linha certa antes mesmo da compilação (aula Compilação Condicional).
Experimente: rode e veja o que o editor do guia responde. Ele não é Windows, nem Mac, nem Linux: o programa roda dentro do navegador, num formato chamado WebAssembly (WASI). Compile o mesmo arquivo no seu computador depois e compare.
#include <stdio.h>
int main(void) {
#if defined(_WIN32)
printf("Compilado para: Windows\n");
#elif defined(__APPLE__)
printf("Compilado para: macOS\n");
#elif defined(__linux__)
printf("Compilado para: Linux\n");
#elif defined(__wasi__)
printf("Compilado para: WebAssembly (o editor do guia)\n");
#else
printf("Compilado para: outro sistema\n");
#endif
return 0;
}
No terminal da Ana, com o gcc, o mesmo programa responde:
$ gcc -std=c23 -Wall -Wextra sistema.c -o sistema $ ./sistema Compilado para: Linux
Quando dá errado
As mensagens abaixo são as que aparecem nos sistemas configurados em português; o texto exato pode variar com a versão (ilustrativo).
O termo 'gcc' não é reconhecido como nome de cmdlet, função, arquivo de script ou programa operável
O que significa: o PowerShell não achou o gcc. Ou ele não foi instalado, ou a pasta C:\msys64\ucrt64\bin não está no PATH, ou o terminal foi aberto antes de você mudar o PATH.
Como consertar: confira se gcc --version funciona no terminal MSYS2 UCRT64. Se funciona lá, o problema é o PATH: refaça os passos de "Usar o gcc fora do terminal do MSYS2" e abra um terminal novo. Atenção: se você instalou pelo terminal "MSYS2 MSYS" (e não o UCRT64), o pacote foi para outro lugar; use o UCRT64.
Olá, mundo! em vez de Olá, mundo!
O que significa: o programa escreveu o á corretamente, no formato UTF-8 (dois bytes, como você viu no \303\241 do assembly da aula Como o C Vira Programa), mas o console do Windows interpretou esses bytes numa codificação antiga, e cada byte virou um caractere estranho. O terminal do MSYS2 não tem esse problema; o PowerShell e o Prompt de Comando, muitas vezes, têm.
Como consertar: digite chcp 65001 antes de rodar o programa (troca o console para UTF-8), ou rode pelo terminal do MSYS2. A aula Acentos e UTF-8 explica em detalhes.
'scanf': This function or variable may be unsafe
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
O que significa: o compilador da Microsoft desaconselha várias funções padrão do C (scanf, strcpy, fopen…) e sugere versões "seguras" com _s no fim, que só existem no Visual Studio. Nos projetos novos, essa reclamação vira erro. O código do guia está correto: ele usa as funções padrão do jeito seguro (conferindo o retorno do scanf, usando fgets e snprintf).
Como consertar: coloque #define _CRT_SECURE_NO_WARNINGS como primeira linha do arquivo, antes dos #include. Não troque para scanf_s: o seu programa deixaria de compilar no gcc e no Clang. (Ou, melhor ainda para seguir o guia, use o MSYS2 ou o WSL.)
cannot open output file ola.exe: Permission denied
O que significa: "não foi possível abrir o arquivo de saída ola.exe: permissão negada". No Windows, um .exe que está rodando fica "trancado": o ligador não consegue escrever a versão nova por cima. Também acontece quando o antivírus está examinando o arquivo recém-criado.
Como consertar: feche o programa que ainda está aberto (uma janela de console esquecida, por exemplo) e compile de novo. Se for o antivírus, espere alguns segundos.
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun
O que significa: as ferramentas de linha de comando não estão instaladas, ou foram desativadas por uma atualização grande do macOS (acontece com frequência depois de mudar de versão do sistema).
Como consertar: rode xcode-select --install de novo e clique em Instalar.
gcc --version ainda diz Apple clang
O que significa: é o esperado. O Homebrew instala o GCC com o número da versão no nome, para não esconder o gcc da Apple, de que outros programas dependem.
Como consertar: use gcc-16 (confira o número com ls $(brew --prefix)/bin/gcc-*).
Referência
| Caminho | Instalar | Compilador | Conferir |
|---|---|---|---|
| Windows, MSYS2 | msys2.org + pacman -S mingw-w64-ucrt-x86_64-toolchain | gcc (GCC) | gcc --version |
| Windows, WSL | wsl --install + sudo apt install build-essential gdb | gcc (GCC, no Ubuntu) | gcc --version |
| Windows, Visual Studio | Instalador + "Desenvolvimento para desktop com C++" | cl (MSVC) | cl (sem nada) no Developer PowerShell |
| macOS, Command Line Tools | xcode-select --install | clang (Apple Clang), também chamado de gcc | clang --version |
| macOS, Homebrew | brew install gcc | gcc-16 (GCC) | gcc-16 --version |
Exercícios
1. O kit do MSYS2
Complete o comando que instala o kit de ferramentas (gcc, gdb, make) no ambiente UCRT64 do MSYS2:
2. As ferramentas da Apple
Complete o comando que instala as Command Line Tools no macOS:
3. No Mac, a Ana digitou gcc --version e apareceu Apple clang version …. O que isso quer dizer?
4. A Ana quer seguir o Nível 3 no Windows, com fork, sinais e Valgrind. Qual caminho é o melhor?
5. A Ana compilou o ola.c no Windows e mandou o ola.exe para um amigo com Mac. O que acontece?
6. No Visual Studio, a Ana criou o arquivo ola.cpp e escreveu um programa em C. O que acontece?
Missão final: pronto para o Nível 1
Missão: a Ana escolheu o Windows com o MSYS2. Complete o programa trocando os ???, para ele mostrar as duas linhas abaixo:
Sistema: Windows Compilador: gcc do MSYS2
#include <stdio.h>
int main(void) {
printf("Sistema: ???\n");
printf("Compilador: ???\n");
return 0;
}
#include <stdio.h>
int main(void) {
printf("Sistema: Windows\n");
printf("Compilador: gcc do MSYS2\n");
return 0;
}
Resumo
- Windows, recomendado: MSYS2 +
pacman -S mingw-w64-ucrt-x86_64-toolchain, no terminal UCRT64; para usar no PowerShell e no VS Code, coloqueC:\msys64\ucrt64\binno PATH. - Windows, igual ao guia:
wsl --install, e depois a aula do Linux. É o melhor para o Nível 3 (fork, sinais, Valgrind). - Windows, Visual Studio: funciona para C (arquivos
.c,cl /std:c17), mas o MSVC é pensado para C++ e reclama de funções padrão como oscanf. - macOS:
xcode-select --installtraz oclang, omake, olldbe umgccque é o Clang disfarçado;brew install gcctraz o GCC de verdade comogcc-16. - O comando de compilação é o mesmo em todo lugar; o executável de um sistema não roda no outro.
- Acentos virando
Oláno Windows:chcp 65001. - Próximo passo: escolher onde escrever o código, em Editores e IDEs.