Seluruh kebiasaan yang kita kumpulkan di section ini — dari garis undefined behavior sampai validator path — punya bentuk dokumen resmi yang disusun para ahli: coding guidelines. Guideline bukan teori; ia daftar aturan yang bisa diperiksa manusia maupun alat, dan dipakai proyek dari game sampai mobil. Chapter penutup ini mengenalkan tiga guideline utama untuk C++, menunjukkan aturannya hidup di dalam kode yang teruji, dan menutup section dengan checklist sebelum rilis.
Tiga Guideline yang Layak Dikenal #
SEI CERT C++ Coding Standard disusun oleh Software Engineering Institute di Carnegie Mellon dengan fokus keamanan dan keandalan. Aturannya dikelompokkan per kategori — EXP untuk expression, MEM untuk memory management, F untuk functions — dan tiap aturan memuat pasangan contoh noncompliant versus compliant beserta risiko yang dinilai. Banyak alat pemeriksaan komersial menargetkan aturan ini secara langsung, dan clang-tidy menyediakannya lewat kelompok cert-*.
C++ Core Guidelines ditulis Bjarne Stroustrup dan Herb Sutter bersama komunitas, berisi ribuan aturan bernomor (F, R, ES, CP, dan lainnya) dengan filsafat abstraksi tanpa biaya tambahan: pikirkan lewat tipe dan kepemilikan, bukan disiplin pointer mentah. Aturan yang tidak bisa diperiksa compiler didampingi pustaka kecil bernama GSL, dan clang-tidy menerjemahkan banyak aturannya menjadi kelompok cppcoreguidelines-*.
AUTOSAR C++14 dipakai industri otomotif: subset C++ yang jauh lebih ketat, yang membatasi fitur berperilaku bergantung implementasi dan sebagian pola dinamis, dengan alasan sertifikasi dan determinisme. Tidak semua proyek perlu seketat itu, tetapi membaca alasannya mendidik — setiap larangan memuat justifikasi keamanannya.
| Guideline | Penyusun | Fokus | Bentuk aturan |
|---|---|---|---|
| SEI CERT C++ | SEI, Carnegie Mellon | keamanan dan keandalan | kategori EXP/MEM/F…, contoh noncompliant vs compliant |
| C++ Core Guidelines | Stroustrup, Sutter, komunitas | tipe, kepemilikan, gaya modern | nomor F/R/ES/CP…, didampingi GSL |
| AUTOSAR C++14 | aliansi otomotif | subset ketat dan sertifikasi | aturan bernomor, wajib/opsional |
Guideline di Dalam Kode: Satu Program Kecil #
Guideline baru berarti sesuatu bila aturannya terlihat di kode. Program berikut mempraktikkan beberapa aturan sekaligus dan menamakannya di komentar:
// panduan.cpp — kebiasaan dari guideline resmi, dipraktikkan dalam satu program kecil.
#include <iostream>
#include <memory>
#include <string>
#include <string_view>
#include <vector>
// Core Guidelines F/STR: parameter teks masuk lewat string_view, batas dari data,
// tidak ada aritmetika pointer mentah, tidak ada indeks yang ditebak.
std::string_view potong(std::string_view teks, std::size_t maks) {
if (maks >= teks.size()) {
return teks; // seluruh teks aman dikembalikan
}
return teks.substr(0, maks); // potongan di dalam batas
}
int main() {
const std::vector<std::string> daftar = {"alpukat", "bawang", "cabai"};
for (const auto& item : daftar) { // ES.71: range-for daripada indeks manual
std::cout << potong(item, 4) << '\n';
}
auto pemilik = std::make_unique<std::string>("pemilik tunggal"); // R.11: hindari new manual
std::cout << *pemilik << '\n'; // MEM50: tidak ada akses setelah pelepasan
pemilik.reset();
std::cout << "sisa pemilik: " << (pemilik ? "masih ada" : "kosong") << '\n';
return 0;
}Output yang Dihasilkan:
alpu
bawa
caba
pemilik tunggal
sisa pemilik: kosongBedah baris-per-baris:
- Baris 11–16 (
potong) — teks masuk lewatstd::string_viewtanpa salinan (keluarga aturan F/STR pada Core Guidelines); batas dihitung dariteks.size()dansubstrdijaga tetap berada di dalam — tidak ada aritmetika pointer dan tidak ada indeks yang ditebak. - Baris 21–23 (range-for, ES.71) — aturan menyuruh memilih range-for daripada perulangan berindeks; tidak ada variabel indeks yang bisa meleset keluar batas.
- Baris 25–28 (kepemilikan, R.11 dan MEM50) —
std::make_uniquemenggantikannewmanual; setelahreset(), program hanya menguji status pointer tanpa mendereferensinya — akses setelah pelepasan mustahil terjadi di jalur ini. - Output —
potongmemotong aman di batas empat karakter dan pesan status menutup program. Kode yang taat guideline terlihat biasa saja — dan itu justru poinnya: keamanan yang benar jarang menarik perhatian.
Guideline Baru Berarti Tooling #
Aturan yang hanya hidup di dokumen akan tergelincir; pasang pemeriksaannya. Baseline kita sepanjang course — g++ -Wall -Wextra — sudah menangkap banyak pelanggaran sejak kompilasi. Langkah berikutnya adalah clang-tidy dengan kelompok aturan guideline; chapter linting-dengan-clang-tidy di section Debugging dan Code Quality membahas pemasangannya:
clang-tidy panduan.cpp --checks=cert-*,cppcoreguidelines-*,clang-analyzer-* -- -std=c++23 -Wall -WextraCara mengadopsinya di proyek nyata: mulai dari kelompok aturan kecil, wajibkan lewat CI, lalu tambahkan bertahap. Mengaktifkan ribuan aturan sekaligus hanya menenggelamkan tim dalam ribuan peringatan; subset yang tumbuh pelan jauh lebih tahan lama.
Checklist Sebelum Rilis dan Penutup Section #
Keamanan dijaga dengan kebiasaan yang diulang; checklist berikut merangkum section ini menjadi daftar yang bisa ditempel di proses rilis:
- Build rilis lolos
-Wall -Wextratanpa peringatan baru; static analysis berjalan di CI tanpa temuan yang diterima diam-diam. - Build uji dijalankan dengan AddressSanitizer/UBSan dan hasilnya bersih.
- Setiap input dari luar melewati validator: panjang, format, rentang; penolakan bersifat default (fail-closed).
- Tidak ada nama berkas dari input yang dipakai tanpa normalisasi dan pemeriksaan awalan; rahasia tidak pernah masuk log.
- Kepemilikan memori lewat smart pointer dan RAII; tidak ada
new/deletemanual pada jalur kode baru. - Temuan keamanan lama dipetakan ke ID CWE dan statusnya dicek ulang setiap rilis.
Section ini dimulai dari garis halus antara bug dan kerentanan — undefined behavior — lalu bergerak melalui out-of-bounds, use-after-free, buffer overflow, luapan bilangan, format string, validasi input, memori, dan berkas, sampai kamus CWE dan guideline resmi. Pola yang sama berulang di setiap chapter: jaga batas, jadikan default yang aman, dan biarkan alat memeriksa. Bekal itu sekarang kita bawa ke babak berikutnya, Section Interoperabilitas dan Ecosystem, yang dibuka dengan pertanyaan lama yang berbahaya: bagaimana C++ berbicara dengan C, bahasa yang mendefinisikan ABI di sebagian besar platform.
Referensi: SEI CERT C++ Coding Standard , C++ Core Guidelines .