No.3ベストアンサー
- 回答日時:
う~ん……加えると……。
そもそもK&Rの第8章って「UNIXシステムインターフェース」ですよね。
と言うことは環境的にはある程度「UNIX依存」じゃないか、とも思えるのですが。
例えば、p215に次の記述があります。
「次に示す典型的なstdio.hからの抜粋では」
と書いてますね。この「典型的な」stdio.hに問題のOPEN_MAXや_iobがまず定義されているわけですけど……。この「典型」になってるのはオリジナルのUNIXのものですよね?
ちなみに「んじゃあFreeBSDなんかのstdio.hはどうなんだ?」とか思って調べてみたわけですが、次のようになってる模様です。
free bsd stdio.h lang:c:
http://www.google.co.jp/codesearch/p?hl=ja#XAzRy …
これ見る限り、「似たような」コードではありますが……。ザーっと読む限り、K&Rで記述されているOPEN_MAXはFOPEN_MAXになっているようですし、また、_iobは__sFILEになってるんじゃないかな?多分。
つまり、使用している環境/コンパイラによって「変数の名称が違う」んですね。また、僕の使ってるLinuxでのgccのstdio.hも一応見てみたんですが、FreeBSD版と違って若干ゴチャゴチャしてましたが(笑)、やっぱり「違う」わけです。
つまり、「低水準入出力関数で実装する」以上、お使いのコンパイラでのヘッダーファイルの記述がどうなってんのか、熟知する必要があるのではないでしょうか?
ないしは、UNIX使ってないんでしたら、この章は飛ばしても大丈夫なのかな、とかちょっと思いました(笑)。
いろいろと言葉足らずなところがありまして
質問の趣旨をあまり伝えることができなくてすいません。
ですが、驚くべきことに質問者さんは
私が知りたかった答え的な回答ドンピシャでしたww
この回答を見て
私の使ってるlinuxではstdio.hの中にはほとんど宣言がないので
いろいろ探してみたところ、
bits/stdio_lim.hにFOPEN_MAX 16があり
libio.hにIO_FILE_
という構造体が宣言されているんで
あまり自信ないですがたぶんこれがファイルのデータを格納する構造体だと思います。
ありがとうございました。
No.2
- 回答日時:
_iodは_iobの誤記かな。
_iobもOPEN_MAXもあなたが定義するものですよ。8.5の最初のプログラムリスト(※1)に
#define OPEN_MAX 20
と
extern FILE _iob[OPEN_MAX];
という行がありませんか? ここで定義ないしは宣言を行っています。
FILE *fopen(char *name, char *mode)のプログラムリストは※1が必要なのではないでしょうかね。私はここら辺は実習していないので正確にはわかりません。ただ、extern FILE _iob[OPEN_MAX]というのは変数宣言であって変数定義ではないので定義はまた別個にやってあげないとセグメンテーションフォールトが発生するかも知れません。
蛇足になりますが、もしあなたが必要にせまられてしょうがなしにこの本を読んでいるのではなく、C言語を本当に理解したいのでこの本で勉強をしているのであれば、1.10 外部変数と通用範囲、5章全部、6章全部をもう一度熟読される事をお勧めします。
また、付録A 参照マニュアルというのがあれば、それは一生使えます。Cウィザードになってもここはいつでも役に立つので何度でも読み返されると良いでしょう。
すみません_iodは誤記です。
え??
…これって/include/stdio.hの抜粋じゃないんですか?
まぁ、確かに打ち込めば話は早いですね
ですが、私としては、ライブラリの勉強がしたいのでstdio.hを見て探しました。
gccのstdio.hだと、変数名とか、宣言の場所がこの本と違うんで分からないんです。
たぶん、この本が出版されてからかなり経ってるので標準ライブラリの形が変わってしまってるんでしょうね。
その上で、現在ではどこにファイルのデータを扱ってる構造体宣言があるのかを聞きたかったのですが
言葉足らずだったみたいです
また出直します
ご回答ありがとうございました。
No.1
- 回答日時:
エラーになったソースを補足してください。
補足する際は、手で打ち込むのではなく、元のソースをコピーして貼り付けてください。手で打ち込むときに、打ち込み間違いがあり、そのため、期待した回答が得られない場合があります。
また、そのソースをコンパイルした、OS、コンパイラの名称も必ず補足してください。(例1windows-xp,visual studio2008,例2linux,gcc等)
いろいろと不足があったみたいですいません。
今度からコードはコピペします。
一応、OSはlinuxでコンパイラはそれについてたのだから
gccだと思います。(少なくともborlandとwindowsのvisual...じゃないです)
ソースコードの方が学校にあって今はないので
頑張って自分で探します。
ご回答ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# エラー: ‘inval’ の記憶サイズが不明です。 union semun inival; というエ 2 2023/01/16 22:04
- C言語・C++・C# Cのコンパイルでコメントアウトをそのままオブジェクトに保持したい 7 2023/08/01 22:22
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- その他(教育・科学・学問) 通信高三で中一レベルの英語力しかありません。 1週間まえから武田塾に入りました。 今から京都文教又は 9 2022/08/13 19:10
- 高校受験 高校受験まで2週間/未だに理社が平均点以下 理社の点数が未だに平均点以下から上がらず困っています… 1 2023/01/29 18:24
- 予備校・塾・家庭教師 武田塾について。通信制高校3年です。 中学から含め全く勉強しませんでした。 高校は母も病気気味だった 2 2022/08/11 20:46
- 統計学 Rを用いた「繰り返しがある直交表実験計画法」の分析方法 8 2023/08/01 17:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
Eclipseの環境設定について
-
コンパイルできない
-
C++ で、「)」が必要 というエ...
-
どのプログラミング言語ででき...
-
mac(leopard)でgslが使えません
-
C++でアボート(Abort)で処理が...
-
QBasicをWindowsXPで使いたい!
-
変数(関数)名の頭に_
-
「.c」拡張子でC++文法を使...
-
C言語のコンパイラ
-
volatile修飾について
-
Visual C++とVisual C++.NETの違い
-
ABAQUS ユーザーサブルーチン...
-
65536は2の何乗なのでしょうか?
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
-
VBAにてメール作成した際、一部...
-
正しい五十音順について
-
パックマンプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++でアボート(Abort)で処理が...
-
変数(関数)名の頭に_
-
C++ で、「)」が必要 というエ...
-
io.hをincludeするとそのような...
-
C言語のワーニングメッセージの...
-
Eclipseの環境設定について
-
ABAQUS ユーザーサブルーチン...
-
Visual C++とVisual C++.NETの違い
-
コンパイルできない
-
volatile修飾について
-
コンパイラについて
-
コンパイラフラグ(compiler fla...
-
Delphiの逆コンパイル
-
fortranでのNaNについて
-
cobolの文法チェックソフト
-
不要なインクルードファイルの検出
-
__extension__
-
IPアドレス表示プログラム
-
isnanの取り扱いについて
おすすめ情報