競合する関数 getline()
は GNU/POSIX 拡張です。
K&R は、この機能を提供していない本 (参照) で特に ANSI C に対処していると述べています。
<ブロック引用>著者は、ANSI 標準 C 言語プログラミングの完全なガイドを提供します。
gcc を「K&R 互換モード」に設定するには、コンパイルに ANSI または ISO モードを指定できます。これらは、機能 getline()
などの拡張機能を無効にすることを目的としています。 .これにより、最終的には K&R が提供する他の例も編集する必要がなくなる可能性があります。
たとえば、次のコードは正常にコンパイルされます:
$ gcc test.c -ansi
$ gcc test.c -std=c89
(暗黙のデフォルトの戻り値の型 main()
について不平を言うことを除いて) -Wall
で .)
一部のシステムでは、これらのモードがここに示すように機能しない場合があります (Mac OS の一部のバージョンでは、すべての拡張機能を正しく無効にできないようです)。私のマシンでこれを正常にテストしました:
$ 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.
問題は getline()
標準ライブラリ関数です。 (stdio.h
で定義) ) あなたの関数は同じ名前を持っているため、衝突しています.
解決策は、単に名前を変更することです。
これは stdio.h
getline()
を持っている 関数。
したがって、これを機能させる簡単な方法は、関数の名前を my_getline()
に変更することです
両方 getline()
および getdelim()
元は GNU
でした 拡張機能。それらは POSIX.1-2008
で標準化されました .