Program pertama dan anatominya

Hello World dengan iostream, struktur program C++, dan alasan main mengembalikan int.

Daftar isi

Topik ini menjabarkan program C++ pertama secara utuh: isi berkasnya, perintah untuk mengompilasi dan menjalankannya, serta arti setiap barisnya. Program yang dipakai adalah versi klasik yang mencetak satu baris sapaan ke layar. Struktur program ini mengikuti pola yang sama dengan seluruh contoh pada jalur C++, sehingga layak dipahami dengan saksama sebelum bergerak ke materi yang lebih luas.

Anatomi program halo.cpp#

Program C++ paling sederhana terdiri atas dua bagian, yaitu satu arahan preprocessor untuk memuat pustaka dan satu fungsi main sebagai titik masuk. Simpan kode berikut sebagai berkas bernama halo.cpp.

cpp halo.cpp
#include <iostream>

int main() {
    std::cout << "Halo, dunia!\n";
    return 0;
}
text Keluaran
Halo, dunia!

Baris pertama, #include <iostream>, adalah arahan bagi preprocessor agar deklarasi pustaka standar bernama iostream digabungkan ke dalam berkas ini. Pustaka itulah yang menyediakan fasilitas masukan dan keluaran, termasuk std::cout yang dipakai di baris keempat. Tanpa arahan ini, compiler tidak mengenal std::cout dan menolak mengompilasi program.

Baris berikutnya, int main(), mendeklarasikan fungsi utama. Setiap program C++ memulai eksekusinya dari main, sehingga program yang dapat dijalankan wajib memilikinya. Tanda kurung kurawal { dan } membatasi badan fungsi, yaitu kumpulan pernyataan yang dieksekusi satu per satu dari atas ke bawah. Setiap pernyataan diakhiri titik koma, dan kelalaian menuliskannya merupakan sumber error paling umum bagi pemula.

Komentar di dalam kode sumber#

Komentar adalah teks yang diabaikan compiler dan ditulis semata-mata untuk pembaca manusia. C++ menyediakan dua bentuk, yaitu komentar satu baris yang diawali // dan komentar banyak baris yang diapit /* serta */. Bentuk pertama berlaku sampai akhir barisnya, sedangkan bentuk kedua boleh membentang beberapa baris sekaligus. Komentar banyak baris tidak dapat disarangkan, karena tanda */ pertama sudah menutup komentar tersebut. Program berikut menempatkan ketiga posisi komentar yang paling umum.

cpp
#include <iostream>

// program ini menyapa satu baris teks
int main() {
    /* penjelasan beberapa baris
       berada di sini */
    std::cout << "Halo, dunia!\n";  // komentar di akhir baris
    return 0;
}
text Keluaran
Halo, dunia!

Keluaran program ini persis sama dengan halo.cpp karena compiler membuang seluruh komentar sebelum penerjemahan dimulai. Komentar yang baik menjelaskan alasan sebuah keputusan, misalnya mengapa suatu nilai dipilih, dan bukan mengulang isi pernyataan yang sudah terbaca sendiri. Kebiasaan ini menjaga kode tetap dapat dipahami kembali ketika dibuka setelah sekian lama.

Mengompilasi dan menjalankan program#

Kode sumber berformat teks belum dapat dieksekusi, sehingga perlu diterjemahkan terlebih dahulu oleh compiler menjadi program biner. Perintah g++ melakukan penerjemahan itu, lalu opsi -o menentukan nama berkas hasilnya. Kompilasi program contoh dapat dilakukan dengan dua perintah berikut.

bash
# kompilasi halo.cpp menjadi program bernama halo di direktori /tmp
g++ halo.cpp -o /tmp/halo
# jalankan program yang baru dibuat
/tmp/halo
text Keluaran
Halo, dunia!

Apabila tidak ada error, g++ tidak mencetak pesan apa pun dan berkas biner muncul di /tmp/halo. Ketiadaan pesan seperti ini sering mengejutkan pemula, padahal banyak alat command line berperilaku sama ketika berhasil. Bila terjadi error, compiler mencetak nomor baris beserta penjelasan masalahnya, dan berkas biner tidak dibuat.

Menyalakan peringatan compiler#

Secara default, compiler hanya melaporkan error yang menggagalkan kompilasi, sedangkan temuan lainnya diberikan lewat peringatan (warning). Opsi -Wall mengaktifkan kelompok peringatan yang paling sering berguna, dan -Wextra menambahkan kelompok yang lebih teliti lagi. Berkas berikut sengaja memuat satu variabel yang dideklarasikan tetapi tidak pernah digunakan.

cpp peringatan.cpp
// tidak-dijalankan (contoh peringatan compiler; dijalankan lewat bash di bawah)
#include <iostream>

int main() {
    int sisa = 0;
    int terpakai = 7;

    std::cout << "terpakai = " << terpakai << "\n";
    return 0;
}

Kompilasi berkas tersebut dengan -Wall masih menghasilkan program yang berjalan, tetapi compiler menambahkan laporan pada keluarannya.

bash
# kompilasi dengan peringatan dasar diaktifkan
g++ -Wall peringatan.cpp -o /tmp/peringatan
text Keluaran
peringatan.cpp: In function ‘int main()’:
peringatan.cpp:5:9: warning: unused variable ‘sisa’ [-Wunused-variable]
    5 |     int sisa = 0;
      |         ^~~~

Pesan peringatan memuat lokasi baris dan kolom, jenis temuan, serta nama opsi yang memicunya. Variabel sisa tidak pernah dipakai, yang biasanya menandakan baris perhitungan terlupakan. Karena peringatan tidak menggagalkan build, kebiasaan mengompilasi dengan -Wall -Wextra sejak program pertama membuat temuan semacam ini terbaca sebelum berkembang menjadi bug.

Peran std::cout dan operator «#

Pernyataan std::cout << "Halo, dunia!\n"; mengirim teks ke keluaran standar. Objek std::cout adalah stream keluaran standar, yaitu tujuan tempat program menulis data keluar, yang lazimnya berupa layar terminal. Operator << disebut insertion operator karena fungsinya menyisipkan data ke dalam stream. Operator ini dapat dirantai, sehingga satu pernyataan dapat mengirim beberapa data sekaligus.

cpp Contoh: menyisipkan beberapa data sekaligus
#include <iostream>

int main() {
    std::cout << "Nilai " << 10 + 5 << " lebih besar dari " << 10 << "\n";
    return 0;
}
text Keluaran
Nilai 15 lebih besar dari 10

Awalan std:: menunjukkan bahwa cout berada di dalam namespace std, yaitu pengelompokan pengenal milik pustaka standar C++. Karakter \n di akhir teks adalah escape sequence yang memulai baris baru. Tanpanya, keluaran program berikutnya menempel pada baris yang sama. Alternatif lainnya adalah std::endl, yang memulai baris baru sekaligus memaksa pengosongan buffer keluaran, namun untuk keperluan biasa \n sudah memadai dan lebih ringan.

Arti return 0 pada main#

Tipe kembalian int pada main bukan formalitas. Nilai yang dikembalikan main menjadi kode keluar (exit status), yaitu angka yang diteruskan kepada sistem operasi sebagai laporan akhir program. Konvensinya, 0 berarti program berakhir dengan sukses, sedangkan nilai selain nol menandakan terjadi kegagalan. Shell menyimpan kode keluar perintah terakhir pada variabel $?, sehingga nilainya dapat diperiksa langsung.

bash
# jalankan kembali program halo
/tmp/halo
# tampilkan kode keluar dari perintah terakhir
echo $?
text Keluaran
Halo, dunia!
0

Program contoh selalu mengembalikan 0 karena tidak ada alur yang gagal. Bila suatu saat program perlu melaporkan kegagalan, cukup kembalikan angka selain nol, misalnya return 1; pada jalur errornya. Standar C++ menganggap pengabaian return di akhir main setara dengan return 0;, tetapi menuliskannya secara eksplisit membuat niat program terbaca jelas.

Kesalahan umum#

Beberapa kesalahan berikut paling sering muncul saat menulis program pertama.

  • Lupa titik koma di akhir pernyataan. Compiler menolak berkasnya dengan pesan semacam error: expected ';', dan perbaikannya cukup menambahkan tanda tersebut pada baris yang disebut.
  • Menulis Main dengan huruf besar. C++ membedakan huruf besar dan kecil, sehingga compiler tidak menganggap Main sebagai titik masuk dan proses linking berakhir dengan undefined reference to 'main'.
  • Menggunakan std::cout tanpa #include <iostream>. Compiler melaporkan error: 'cout' was not declared in this scope, dan perbaikannya menambahkan arahan include di awal berkas.
  • Lupa tanda kurung kurawal penutup }. Compiler menyapu sampai akhir berkas tanpa menemukan penutupnya dan melaporkan error: expected '}' at end of input. Perbaikannya mencari tanda { terakhir yang belum selesai, biasanya pada badan main.

Kesalahan-kesalahan di atas memiliki pola yang sama, yaitu membaca pesan error dari baris paling atas, memeriksa baris yang disebut, lalu menyunting penyebabnya. Pesan error compiler bukan tanda kegagalan, melainkan petunjuk perbaikan yang presisi.

Ringkasan#

  • Setiap program C++ memulai eksekusinya dari fungsi main, dan fungsi tersebut mengembalikan int sebagai kode keluar untuk sistem operasi.
  • Arahan #include <iostream> memuat deklarasi std::cout, yaitu stream keluaran standar yang diisi data melalui operator <<.
  • Perintah g++ halo.cpp -o /tmp/halo menerjemahkan kode sumber menjadi program biner, sedangkan opsi -o menetapkan nama hasilnya.
  • Kode keluar 0 berarti sukses, dan nilai selain nol melaporkan kegagalan kepada shell atau sistem operasi.

Referensi#