GNU/Linux >> Linux の 問題 >  >> Linux

K&R2 の第 1 章の最長行の例をコンパイルすると、getline エラーの競合する型が発生するのはなぜですか?

競合する関数 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 で標準化されました .


Linux
  1. 「jobs:NotFound」というエラーメッセージが表示されるのはいつですか。

  2. ファイルが存在する場合にforループの`zip`が機能するのに、存在しない場合は機能しないのはなぜですか?

  3. トラップ、エラー、およびエラーラインのエコー?

  1. EINTR をチェックして関数呼び出しを繰り返すのはいつですか?

  2. linux-vserver があるのになぜ LXC なのですか?

  3. エラーが発生したときに Bash で行番号を見つけるにはどうすればよいですか?

  1. コマンドラインでsortを使用してソートする

  2. コマンドラインでの毎日のBashのヒント

  3. Linux で 7zip アーカイブを抽出しようとすると、誤ったコマンド ラインでエラーが発生する