assert

Written by: Fajar   |   Updated on: September 4, 2021

Penjelasan

assert merupakan sebuah Evaluate Assertion, atau dalam bahasa Indonesia, Evaluate yang berarti evaluasi, dan Assertion yang berarti penegasan. Yang memiliki arti sejalan dengan “pemeriksaan yang ditegaskan”.

Cara kerja dari assert pada C++ sajalan seperti pernyataan “periksa jika lampu itu menyala, jika tidak maka ledakan lampu tersebut.”

assert(ekspresi)

Jika argumen ekspresi yang diberikan kepada makro tersebut bernilai setara dengan 0 atau false, maka fungsi dari abort dipanggil dengan arti program tersebut diakhiri dan juga mengeluarkan pesan standar error.

Pesan yang ditampilkan ditentukan pada implementasi perpustakaan tertentu, dan itu mencangkup ekspresi gagal yang diberikan, nama file sumber, dan nomer baris tempat terjadinya.

assertion failed: (expression), file (filename), line (line number)

Parameter

  • Ekspresi kondisi: Jika eksp-resi memiliki kondisi bernilai 0, maka fungsi dari assert akan dijalankan, yaitu menggagalkan dan menghentikan program.

Return Value

Tidak ada.

Contoh Program

#include <iostream>
#include <cassert> // atau <assert.h>

int main()
{
    int a = 2;
    int b = 3;

    assert(a != b);
    std::cout<<"pemeriksaan mengatakan true dan tidak akan menghentikan program."<<std::endl;
    assert(a == b); //program berhenti disini dan pesan di bawah ini tidak akan dieksekusi.
    std::cout<<"pemeriksaan mengatakan false dan telah menghentikan program."<<std::endl;

    return 0;
}

Hasil Program
pemeriksaan mengatakan true dan tidak akan menghentikan program.
Assertion failed: a == b, file main.cpp, line 11

#define NDEBUG (sejak C++17)

Pada C++ 17 terdapat sebuah macro NDEBUG sebagai fitur tambahan untuk assert. Keberadaan macro ini berfungsi untuk mematikan fungsi atau definisi dari assert.

Jika #define NDEBUG didirikan sebelum penyertaan pustaka dari assert maka fungsi dari assert akan dimatikan dan semua pernyataan assert yang ada pada program kita tidak akan berjalan.

Baca :   cstdbool

Jika #define NDEBUG tidak didirikkan maka fungsi assert akan berjalan sesuai fungsi sebenarnya.

Hal ini mempermudah kita saat mengerjakan sebuah program besar yang membutuhkan dua sisi pengembangan, yaitu production yang tidak membutukan debugging dan development yang pastinya membutuhkan debugging. Dimana saat kita membutuhkan program ini untuk production maka kita cukup mendirikan pernyataan macro dari NDEBUG, maka semua Evaluate Assertion akan dinonaktifkan.

Deklarasi

#define NDEBUG

Didirikan sebelum penyertaan pustaka dari assert.

Contoh Program

#include <iostream>
#define NDEBUG // ini akan menonaktifkan assert
#include <cassert> // atau <assert.h>

int main()
{
    int a = 2;
    int b = 3;

    assert(a != b);
    std::cout<<"pemeriksaan mengatakan true dan tidak akan menghentikan program."<<std::endl;
    assert(a == b); //program berhenti disini dan pesan di bawah ini tidak akan dieksekusi.
    std::cout<<"pemeriksaan mengatakan false dan telah menghentikan program."<<std::endl;

    return 0;
}

pemeriksaan mengatakan true dan tidak akan menghentikan program.
pemeriksaan mengatakan false dan telah menghentikan program.

Menambahkan pesan pada assert

Pada dasarnya macro assert hanya menerima satu argumen dan argumen tersebut adalah ekspresi, jadi hal ini memang tidak disediakan oleh standar C++. Tapi kita dapat melakukan sedikit modifikasi pada ekspresi yang kita berikan untuk mencapai fitur ini.

Selama assert akan menampilkan keseluruhan ekspresi yang kita berikan maka kita dapat menyisipkan sebuah pesan pada ekspresi tersebut, dengan cara:

#include <iostream>
//#define NDEBUG
#include <cassert> // atau <assert.h>

int main()
{
    int a = 2;
    int b = 3;

    assert(a != b);
    assert( ((void)"ini tidak sama", 2 + 2 == 5) ); //Bisa dilakukan seperti ini
    assert( ("ini tidak sama" && 2 + 2 == 5) ); // atau juga bisa seperti ini

    return 0;
}

Hasil Program
Cara ke-1:
Assertion failed: ((void)”ini tidak sama”, 2 + 2 == 5), file main.cpp, line 11

Baca :   cmath (math.h)

Cara ke-2:
Assertion failed: ((“ini tidak sama” && 2 + 2 == 5)), file main.cpp, line 12


Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *