GNU/Linux >> Belajar Linux >  >> Linux

Mengapa saya mendapatkan tipe konflik untuk kesalahan getline saat mengkompilasi contoh baris terpanjang di bab 1 K&R2?

Fungsi yang bertentangan getline() adalah ekstensi GNU/POSIX.

K&R menyatakan bahwa mereka membahas secara khusus ANSI C dalam buku mereka (lih.), yang tidak menyediakan fungsi ini.

Penulis menyajikan panduan lengkap untuk pemrograman bahasa C standar ANSI.

Untuk menyetel gcc ke "mode kompatibilitas K&R", Anda dapat menentukan mode ANSI atau ISO untuk kompilasi. Ini dimaksudkan untuk menonaktifkan ekstensi, misalnya fungsi getline() .Hal ini pada akhirnya dapat menghilangkan kebutuhan untuk mengedit contoh lain yang juga disediakan oleh K&R.

Misalnya, kompilasi berikut baik-baik saja:

$ gcc test.c -ansi
$ gcc test.c -std=c89

(Kecuali bahwa mereka mengeluh tentang tipe pengembalian default tersirat dari main() dengan -Wall .)

Rupanya pada beberapa sistem, mode ini mungkin tidak berfungsi seperti yang disajikan di sini (tampaknya beberapa versi Mac OS gagal menonaktifkan semua ekstensi dengan benar). Saya berhasil mengujinya di mesin saya:

$ gcc --version
gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Masalahnya adalah getline() adalah fungsi perpustakaan standar. (didefinisikan dalam stdio.h ) Fungsi Anda memiliki nama yang sama dan karenanya berbenturan dengannya.

Solusinya cukup ganti nama.


Ini karena stdio.h memiliki getline() fungsi.

Jadi hal sederhana untuk membuat ini berfungsi adalah mengganti nama fungsi Anda menjadi my_getline()

Keduanya getline() dan getdelim() awalnya adalah GNU ekstensi. Mereka distandarisasi dalam POSIX.1-2008 .


Linux
  1. Diurutkan dengan sort di baris perintah

  2. Kiat bash untuk sehari-hari di baris perintah

  3. Kapan Seseorang Mendapatkan Pesan Kesalahan "pekerjaan:Tidak Ditemukan"?

  1. Bagaimana Cara Bergabung dengan Baris Berikutnya Ketika Sebuah Baris Sesuai Dengan Regex Untuk Seluruh Dokumen Di Vi?

  2. Mengapa `zip` Dalam A For Loop Bekerja Saat File Ada, Tapi Tidak Saat Tidak?

  3. Perangkap, Err, Dan Menggaungkan Garis Kesalahan?

  1. Dapatkan Persentase Penggunaan Untuk Sebuah Mount Point?

  2. Kapan harus memeriksa EINTR dan mengulangi pemanggilan fungsi?

  3. Mengapa LXC ketika ada linux-vserver?