GNU/Linux >> Belajar Linux >  >> Linux

Ketika assert() gagal, apa kode keluar programnya?

Ini khusus implementasi. Anda dapat melakukan ini:

int main()
{
    assert(0);
}

Kemudian jalankan:

./a.out
echo $?

1 (<- atau apa pun)

Ini setidaknya akan memberi tahu Anda apa yang diharapkan untuk penyiapan Anda. Saya mendapatkan 134 pada beberapa kotak Linux dengan GCC dan g++.


Standar C99 (tidak berubah dalam C11) menyatakan bahwa assert memanggil abort dan abort stuff menyatakan ini tentang kode pengembalian:

Bentuk yang ditentukan implementasi dari status penghentian yang tidak berhasil dikembalikan ke lingkungan host melalui pemanggilan fungsi raise(SIGABRT) .

Ini didokumentasikan di bagian 7.2.1.1 (tegaskan) dan 7.20.4.1 (batalkan) standar C99 di sini.

Banyak sistem UNIX akan mengembalikan 128 ditambah nomor sinyal (SIGABRT adalah sinyal nomor 6) sehingga Anda bisa mendapatkan 134. Apa pun yang Anda dapatkan, itu harus didokumentasikan oleh implementasi C.

Misalnya, lihat di sini untuk gcc . Meskipun cukup diam tentang apa yang dikembalikan ke lingkungan panggilan. Dari bagian spesifik di sini:

Beberapa pilihan dibuat oleh perpustakaan dan sistem operasi (atau lingkungan lain saat mengompilasi untuk lingkungan yang berdiri sendiri); lihat dokumentasi mereka untuk detailnya.

Dan ini:

Perilaku dari sebagian besar poin ini bergantung pada implementasi library C, dan tidak ditentukan oleh GCC itu sendiri.

Begitu juga dengan glibc doco di sini tentang penghentian program (khususnya bit status keluar). Itu menyebutkan konvensi tetapi tidak ada aturan tegas.


Linux
  1. Apa Yang Terjadi Saat Saya Menjalankan Perintah Cat /proc/cpuinfo?

  2. Apa yang Terjadi Saat Saya Mengeksekusi File Di Shell?

  3. Bagaimana Mendapatkan Informasi Lebih Lanjut Tentang Asal Usul Kode Keluar?

  1. Apa yang Akan Saya Dapatkan Saat Sudo Program Penghancur Kernel?

  2. Apa yang Dilakukan Program Saat Mengirim Sinyal Sigkill?

  3. Apa itu Kode Keluar Bash di Linux

  1. Berapa ukuran maksimum nilai variabel lingkungan Linux?

  2. Apa pentingnya caddr_t dan kapan digunakan?

  3. Apa :-!! dalam kode C?