Windows tidak menyertakan compiler C bawaan—kita perlu memasang MinGW-w64 (port GCC untuk Windows) atau MSVC (Microsoft Visual C++) sebagai toolchain. Bab ini menuntun kita memasang kedua opsi, mengonfigurasi PATH, dan memverifikasi instalasi dengan program “Halo Dunia”. Kita juga membahas perbedaan model data LLP64 (Windows) versus LP64 (Linux) yang mempengaruhi ukuran long.

1. Opsi A: MinGW-w64 via MSYS2 #

MSYS2 adalah distribusi software yang menyediakan environment Unix-like di Windows dengan package manager pacman (sama seperti Arch Linux). Ini adalah cara termudah memasang GCC modern di Windows.

Langkah Instalasi #

  1. Download installer dari https://www.msys2.org/.
  2. Jalankan installer, install ke path default C:\msys64.
  3. Buka terminal MSYS2 UCRT64 dari Start Menu.
  4. Update database paket:
bash
pacman -Syu

Jika diminta restart terminal, tutup dan buka kembali, lalu jalankan update sekali lagi:

bash
pacman -Su
  1. Pasang toolchain C:
bash
pacman -S --needed mingw-w64-ucrt-x86_64-gcc \
              mingw-w64-ucrt-x86_64-make \
              mingw-w64-ucrt-x86_64-gdb \
              mingw-w64-ucrt-x86_64-cmake

Menambahkan ke PATH Windows #

Agar compiler dapat dipanggil dari Command Prompt atau PowerShell:

  1. Buka Settings → System → About → Advanced system settings.
  2. Klik Environment Variables.
  3. Edit Path di section User variables.
  4. Tambahkan dua path:
    • C:\msys64\ucrt64\bin
    • C:\msys64\usr\bin
  5. Klik OK, lalu tutup semua dialog.
  6. Tutup dan buka kembali PowerShell.

Verifikasi #

Buka PowerShell baru (bukan MSYS2 terminal) dan jalankan:

powershell
gcc --version
make --version
gdb --version

Output yang Dihasilkan (versi tergantung rilis):

text
gcc.exe (Rev6, Built by MSYS2 project) 14.2.0
GNU Make 4.4.1
GNU gdb (GDB) 15.2

2. Opsi B: Microsoft Visual C++ (MSVC) #

MSVC adalah compiler resmi Microsoft, didistribusikan sebagai bagian Visual Studio atau Build Tools. Lebih cocok bila kita perlu integrasi dengan Windows API atau library Windows-only.

Langkah Instalasi (Build Tools) #

  1. Download Build Tools for Visual Studio dari https://visualstudio.microsoft.com/visual-cpp-build-tools/.
  2. Jalankan installer.
  3. Pada installer GUI, centang workload Desktop development with C++.
  4. Klik Install—unduhan sekitar 6-8 GB.
  5. Setelah selesai, restart komputer.

Mengaktifkan Developer Command Prompt #

MSVC tidak menambahkan path secara global—kita perlu memakai Developer Command Prompt for VS atau Developer PowerShell. Cari di Start Menu.

Verifikasi:

cmd
cl

Output yang Dihasilkan (cl.exe menampilkan banner):

text
Microsoft (R) C/C++ Optimizing Compiler Version 19.42.34435 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

Kompilasi dengan MSVC #

MSVC memakai flag berbeda dari GCC. Contoh compile program hello.c:

cmd
cl /std:c11 /W4 /EHsc hello.c

Flag /std:c11 memilih standar C11, /W4 set warning level 4 (paling ketat), /EHsc set exception handling model.

3. Verifikasi dengan Hello World #

Buat file hello.c berikut:

c
/* File: hello.c - Verifikasi toolchain C */
#include <stdio.h>

int main(void) {
    printf("Toolchain Windows siap\n");
    return 0;
}

Compile dan jalankan dengan MinGW-w64 (PowerShell):

powershell
gcc -std=c11 -Wall -Wextra -o hello.exe hello.c
.\hello.exe

Output yang Dihasilkan:

text
Toolchain Windows siap

Compile dengan MSVC (Developer Command Prompt):

cmd
cl /std:c11 /W4 /EHsc hello.c
hello.exe

Output yang Dihasilkan (sama):

text
Toolchain Windows siap

4. Perbedaan Model Data LP64 vs LLP64 #

Pada Windows 64-bit, long tetap 4 byte—berbeda dari Linux yang long = 8 byte. Ini disebut model data LLP64 (Long Long Pointer 64-bit).

TipeLinux x86_64 (LP64)Windows x64 (LLP64)
int4 byte4 byte
long8 byte4 byte
long long8 byte8 byte
void*8 byte8 byte
size_t8 byte8 byte

Program berikut memverifikasi perbedaan:

c
#include <stdio.h>
#include <limits.h>

int main(void) {
    printf("sizeof(long)      = %zu\n", sizeof(long));
    printf("sizeof(long long) = %zu\n", sizeof(long long));
    printf("LONG_MAX          = %ld\n", LONG_MAX);
    printf("LLONG_MAX         = %lld\n", LLONG_MAX);
    return 0;
}

Di Linux LP64, output sizeof(long) = 8. Di Windows LLP64, output sizeof(long) = 4.

5. Troubleshooting #

gcc: command not found di PowerShell #

PATH belum diperbarui. Tutup semua jendela PowerShell, buka yang baru, lalu coba lagi. Jika tetap gagal, periksa:

powershell
echo $env:PATH
Test-Path C:\msys64\ucrt64\bin\gcc.exe

Bila file ada tetapi PATH tidak termuat, tambahkan manual untuk sesi saat ini:

powershell
$env:PATH += ";C:\msys64\ucrt64\bin"

cl : The term 'cl' is not recognized #

PowerShell biasa tidak memuat environment MSVC. Gunakan Developer PowerShell for VS, atau jalankan vcvars64.bat dari Command Prompt biasa:

cmd
"C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"

Warning: conversion from 'size_t' to 'int', possible loss of data #

MSVC lebih ketat dari GCC pada konversi implicit. Tambahkan cast eksplisit atau ubah tipe ke size_t bila perlu. Jangan abaikan warning ini—ini sumber bug sulit dideteksi.

Tidak bisa compile kode yang memakai pthread.h #

MinGW-w64 mendukung pthread sebagai Win32 thread. Tambahkan flag -pthread saat link:

powershell
gcc -std=c11 -Wall -Wextra -pthread -o app app.c

MSVC tidak mendukung pthread secara native—gunakan Windows Threads API (CreateThread) atau library portabel seperti winpthreads.