Sebelum memahami lebih dalam materi tentang Fungsi EXIT, ABORT, dan ASSERT Bahasa C, terlebih dahulu pelajari materi tentang:
.
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: 15Catatan: 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.
Apa yang dimaksud dengan fungsi EXIT pada bahasa C?
BalasHapusFungsi 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.
HapusApa yang dimaksud dengan fungsi ABORT pada Bahasa C?
BalasHapusFungsi 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.
HapusApa yang dimaksud dengan fungsi Assert pada Bahasa C?
BalasHapusFungsi assert pada Bahasa C memungkinkan informasi diagnostik yang ditulis ke file error standar, yang digunakan untuk menambahkan diagnostik ke program bahasa C.
Hapus