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
.