Lompat ke konten Lompat ke sidebar Lompat ke footer

Fungsi EXIT, ABORT, dan ASSERT Bahasa C

Pada artikel ini akan dijelaskan bagaimana penggunaan fungsi exit(), abort(), dan assert() pada bahasa Pemrograman C.


Sebelum memahami lebih dalam materi tentang Fungsi EXIT, ABORT, dan ASSERT Bahasa C, terlebih dahulu pelajari materi tentang: Fungsi Static Bahasa C dan Penjelasannya, Peran Fungsi Prototype Bahasa C Beserta Penjelasannya, dan Pengembalian Nilai Fungsi Ganda Bahasa C.

FUNGSI EXIT

Fungsi exit() bertugas untuk mematikan proses program yang sedang berjalan secara normal. Fungsi `EXIT` merupakan salah satu fungsi yang digunakan untuk menghentikan eksekusi program dengan cara yang terkontrol. Fungsi ini berasal dari pustaka standar `<stdlib.h>`, dan tujuannya adalah untuk mengakhiri proses secara eksplisit, memberikan kode keluar (exit status) yang bisa digunakan untuk menunjukkan apakah program selesai dengan sukses atau mengalami kegagalan. Kode keluar ini diteruskan ke sistem operasi, yang dapat memanfaatkannya untuk menentukan status eksekusi program tersebut.

Saat `EXIT` dipanggil, seluruh proses program dihentikan, dan kontrol dikembalikan ke sistem operasi. Salah satu aspek yang penting dari fungsi ini adalah bahwa fungsi ini memungkinkan pengguna untuk menentukan status keluaran melalui dua nilai yang umum digunakan: `EXIT_SUCCESS` dan `EXIT_FAILURE`. Nilai `EXIT_SUCCESS` biasanya digunakan untuk menunjukkan bahwa program telah selesai dengan normal dan tanpa masalah, sementara `EXIT_FAILURE` digunakan untuk menandakan bahwa program mengalami kegagalan atau berakhir tidak seperti yang diharapkan. Dalam beberapa kasus, kode keluar yang lebih spesifik bisa didefinisikan sesuai dengan kebutuhan pengembang, memberikan tingkat granularitas lebih tinggi pada proses pengendalian error.

Fungsi `EXIT` juga memastikan bahwa semua alokasi memori yang dilakukan selama program berjalan akan dibersihkan dengan cara yang sesuai. Ini mencakup eksekusi fungsi-fungsi pembersihan, seperti penutupan file yang masih terbuka, yang dapat menghindari kebocoran memori dan memastikan bahwa semua sumber daya yang dialokasikan sebelumnya dapat dibebaskan sebelum program dihentikan. Secara umum, fungsi ini digunakan ketika sebuah kesalahan fatal terdeteksi dan tidak ada lagi cara untuk melanjutkan eksekusi program.

Sintak: void exit ( int status );

Status value dari fungsi exit() akan mengembalikan nilai ke parent proses. Secara umum, sebuah value status dari 0 atau EXIT_SUCCESS mengindikasikan bahwa proses berhasil, dan nilai lainnya atau konstanta EXIT_FAILURE digunakan untuk mengindikasikan error

Performa dari fungsi exit() diperlihatkan pada beberapa bentuk operasi sebagai beirkut:
  • Mengeluarkan data buffer yang tidak dibaca.
  • Menutup semua file yang sedang dibuka pada program.
  • Menghapus file sementara.
  • Mengembalikan nilai status integer exit ke sistem operasi.

Pada standar C, fungsi atexit() dapat digunakan untuk melakukan konstumisasi fungsi exit() untuk menampilkan aksi penambahan pada proses mematikan program.

Contoh: Penggunaan fungsi exit.

/* exit example */

#include <stdio.h>

#include <stdlib.h>


int main ()

{


FILE * pFile;


pFile = fopen ("myfile.txt", "r");


if (pFile == NULL)

{

printf ("Error opening file");

exit (1);

}


else

{

/* file operations here */

}


return 0;

}


Ketika fungsi exit() dipanggil, setipa deskripsi file yang menjadi milik program proses akan ditutup dan setiap children dari proses akan diturunkan oleh proses 1, init, dan proses parent akan dikirim ke bagian sinyal SIGCHLD.

Fungsi exit() hanya mengambil nilai integer args pada rentang nilai 0 sampai dengan 255. Jika nilai exit berada diluar nilai jangkauan tersebut, maka akan mengashilkan kode exit yang tidak terduga. Nilai exit yang lebih besar dari nilai return 255, maka akan mengembalikan inlai kode modul 256. Contoh, exit 9999 memberikan nilai kode dari 15.

Contoh: berikut adalah implementasi bahasa C untuk mengilustrasikan fungsi exit().

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/wait.h>


int main(void)

{


pid_t pid = fork();


if ( pid == 0 )

{

exit(9999); 

//passing value more than 255

}


int status;

waitpid(pid, &status, 0);


if ( WIFEXITED(status) )

{

int exit_status = WEXITSTATUS(status);

printf("Exit code: %d\n", exit_status);

}


return 0;

}

Output:
Exit code: 15

Catatan: Contoh program tersebut mungkin tidak dapat bekerja secara baik jika menggunakan kompilator online karena fungsi fork() disabled.

Penjelasan: Contoh program sebelumnya akan memberikan efek dari overflow integer 8-bit. Setelah nilai 255 (semua set 8 bits) menjadi 0. Maka nilai output adalah "exit code modulo 256". Nilai output aktual dari modul dengan nilai 9999 dan 256 adalah 15.

FUNGSI ABORT

Tidak seperti fungsi exit(), fungsi abort() tidak menutup semua file yang sedang dibuka pada program, fungsi abort() juga tidak menghapus file sementara dan tidak mengeluarkan stream buffer. Fungsi abort() juga tidak melakukan pemanggilan register melalui fungsi atexit().

Sintak: void abort ( void );

Berbeda dengan `EXIT`, fungsi `ABORT` adalah cara untuk menghentikan eksekusi program secara paksa dan tanpa memberi kesempatan bagi program untuk menyelesaikan prosesnya dengan cara yang terkontrol. Fungsi ini, yang juga berasal dari pustaka `<stdlib.h>`, memberikan cara untuk menghentikan eksekusi program secara langsung. Begitu `ABORT` dipanggil, eksekusi program dihentikan seketika, dan kontrol tidak lagi kembali ke bagian mana pun dari program yang belum selesai. Tidak ada kode keluaran yang dapat ditentukan oleh pengguna melalui fungsi ini, sehingga tidak ada cara bagi sistem operasi atau pengguna untuk mengetahui apakah program selesai dengan sukses atau gagal.

Fungsi `ABORT` biasanya digunakan dalam situasi yang sangat kritis, misalnya ketika ada pelanggaran yang tidak dapat diperbaiki dalam struktur internal program, atau ketika mendeteksi kondisi yang seharusnya tidak terjadi dalam alur eksekusi normal program. Salah satu ciri khas dari `ABORT` adalah bahwa, meskipun eksekusi dihentikan, tidak ada langkah pembersihan yang dilakukan secara otomatis. Oleh karena itu, semua alokasi memori atau sumber daya lainnya yang belum dibebaskan tetap berada dalam keadaan tidak terkelola. Dalam beberapa sistem, pemanggilan `ABORT` akan menghasilkan laporan kesalahan yang mengindikasikan penyebab penghentian program, tetapi hal ini tergantung pada implementasi dan lingkungan pengembangan yang digunakan.


Karena sifatnya yang langsung menghentikan eksekusi, fungsi ini umumnya dianggap sebagai langkah terakhir yang diambil ketika semua upaya untuk menangani kesalahan atau kondisi abnormal lainnya gagal. Penggunaannya cenderung terbatas pada situasi darurat di mana tidak ada pilihan lain selain menghentikan program secepat mungkin untuk menghindari kerusakan lebih lanjut atau perilaku yang tidak diinginkan.

Fungsi abort() pada bahasa C berfungsi untuk mematikan proses yang diaktifkan oleh sinyal SIGABRT, dan program yang akan dimatikan juga termasuk sebuah handler ke intercept sinyal ini sendiri.

Contoh: program yang akan mencetak pesan "Makan dan Makan" ke "tempfile.txt".

#include<stdio.h>

#include<stdlib.h>


int main()

{


FILE *fp = fopen("C:\\myfile.txt", "w");


if(fp == NULL)

{

printf("\n could not open file ");

getchar();

exit(1);

}


fprintf(fp, "%s", "Makan dan Makan");


/* ....... */

/* ....... */

/* Something went wrong so terminate here */


abort();


getchar();


return 0;

}


Catatan:
Jika ingin memastikan bahwa data telah dibuat ke dalam file dan buffer telah dikeluarkan, maka gunakan fungsi exit() atau masukkan sebuah sinyal handler untuk SIGABRT.

FUNGSI ASSERT

Jika sebuah ekspresi dievaluasi menjadi nilai 0 atau false, maka ekspresi pada filename source code, dan baris angka akan dikirim ke standar error, dan fungsi abort() pun akan dipanggil ke program. Jika identifier NDEBUG atau "no debug" telah didefinisikan dengan #define NDEBUG, maka makro assert tidak akan melakukan proses apapun.

Sintak: void assert( int expression );

Fungsi `ASSERT`, yang terdapat dalam pustaka `<assert.h>`, memiliki tujuan yang berbeda dibandingkan dengan `EXIT` dan `ABORT`. Fungsi ini digunakan untuk memverifikasi kondisi tertentu dalam program pada saat pengembangan atau debugging. `ASSERT` berfungsi untuk memeriksa apakah ekspresi yang diberikan bernilai benar. Jika ekspresi tersebut bernilai salah, maka `ASSERT` akan menghentikan eksekusi program dan memberikan pesan kesalahan yang menjelaskan kegagalan tersebut. Berbeda dengan `ABORT`, fungsi ini tidak dimaksudkan untuk menghentikan program secara permanen dalam kondisi nyata, tetapi lebih sebagai alat untuk membantu pengembang mendeteksi kesalahan dalam logika program selama fase pengembangan.

Ketika menggunakan `ASSERT`, program berjalan seperti biasa selama ekspresi yang diberikan menghasilkan nilai yang benar (true). Namun, jika ekspresi bernilai salah (false), maka program akan berhenti sejenak dan menampilkan informasi yang berguna untuk analisis lebih lanjut. Informasi ini mencakup nama file, nomor baris tempat kesalahan terjadi, dan nilai ekspresi yang gagal, yang memudahkan pengembang untuk melacak dan memperbaiki masalah dengan lebih cepat.

Penting untuk dicatat bahwa `ASSERT` biasanya hanya aktif dalam mode debugging. Dalam implementasi rilis, makro `ASSERT` seringkali dihilangkan atau dinonaktifkan oleh preprocessor, yang berarti bahwa program yang dijalankan dalam lingkungan produksi tidak akan mengalami penghentian mendadak jika kondisi kesalahan ditemukan. Penggunaan `ASSERT` berfokus pada memberikan jaminan bahwa kondisi yang dianggap benar dalam program benar-benar berlaku selama pengembangan. Dalam hal ini, ia berfungsi sebagai alat deteksi kesalahan dan bukan sebagai mekanisme untuk menangani kesalahan dalam eksekusi program.

Contoh:

#include<assert.h>


void open_record(char *record_name)

{

assert(record_name != NULL);

/* Rest of code */

}


int main(void)

{

open_record(NULL);

}


Fungsi `EXIT`, `ABORT`, dan `ASSERT` dalam bahasa C adalah bagian dari pustaka standar yang digunakan untuk menangani situasi yang berbeda dalam proses eksekusi program. Meskipun ketiganya berhubungan dengan cara program mengakhiri eksekusi atau menangani kesalahan, masing-masing memiliki perbedaan mendasar dalam penggunaannya dan efek yang ditimbulkan pada jalannya program.

Perbandingan dan Pemilihan yang Tepat

Secara umum, pemilihan antara `EXIT`, `ABORT`, dan `ASSERT` sangat bergantung pada konteks dan tujuan yang ingin dicapai. Fungsi `EXIT` adalah pilihan yang baik ketika program perlu dihentikan secara terkontrol, baik karena alasan normal seperti selesai dengan sukses, maupun karena alasan kesalahan yang memerlukan penghentian lebih cepat namun masih dalam kendali. Fungsi ini memungkinkan eksekusi program berakhir dengan cara yang bersih dan memungkinkan sistem operasi untuk menangani status keluaran.

Di sisi lain, `ABORT` lebih cocok digunakan dalam situasi darurat yang mengharuskan penghentian langsung dari program tanpa langkah pembersihan atau kontrol tambahan. Penggunaan `ABORT` lebih jarang dan lebih ekstrem karena dapat mengarah pada masalah lebih lanjut terkait kebocoran memori atau penggunaan sumber daya yang tidak efisien.

Sementara itu, `ASSERT` digunakan untuk tujuan yang lebih terbatas, yaitu untuk memeriksa kondisi internal selama pengembangan. Fungsi ini tidak dimaksudkan untuk menangani kesalahan eksekusi pada program yang sudah selesai dikembangkan, melainkan untuk memastikan bahwa kondisi-kondisi tertentu selalu terpenuhi selama tahap debugging. Oleh karena itu, meskipun penggunaannya lebih terbatas, fungsi ini sangat berharga dalam mengidentifikasi potensi kesalahan logika yang mungkin tidak terdeteksi sebelumnya.

Ketiganya—`EXIT`, `ABORT`, dan `ASSERT`—adalah alat yang berbeda dalam menangani kondisi program yang tidak diinginkan, namun dengan cara dan tujuan yang berbeda. Penggunaannya tergantung pada seberapa besar dampak yang diinginkan terhadap jalannya program dan pada tahap mana kesalahan atau kondisi abnormal tersebut terdeteksi.

Artikel ini didedikasikan kepada: Desy Intan Larasati, Doohan Legin, Endah Cahyo Ningrum, Fahrul Irawan, dan Farlian Sanjana.

6 komentar untuk "Fungsi EXIT, ABORT, dan ASSERT Bahasa C"

  1. Apa yang dimaksud dengan fungsi EXIT pada bahasa C?

    BalasHapus
    Balasan
    1. Fungsi EXIT pada bahasa C merupakan fungsi yang digunakan untuk menghentikan pemanggilan proses atau fungsi secara langsung di dalam program. Fungsi ini bertugas untuk mengakhiri setiap proses yang terjadi dalam suatu program.

      Hapus
  2. Apa yang dimaksud dengan fungsi ABORT pada Bahasa C?

    BalasHapus
    Balasan
    1. Fungsi abort() pada bahasa C merupakan pustaka C yang digunakan untuk membawa keluar program tempat fungsi tersebut dipanggil dalam suatu program melalui sinyal SIGABRT yang akan mengharahkan pada proses penghentian program yang sedang dieksekusi saat ini.

      Hapus
  3. Apa yang dimaksud dengan fungsi Assert pada Bahasa C?

    BalasHapus
    Balasan
    1. Fungsi assert pada Bahasa C memungkinkan informasi diagnostik yang ditulis ke file error standar, yang digunakan untuk menambahkan diagnostik ke program bahasa C.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -