※ このページは Psycho氏が ネット上(niftyやvector等)で配布されています
「K&R 2nd. 邦訳書の正誤リスト」 をWEBブラウザで読むのに見やすいように、
色分けして行間を空けたHTMLに変換したものです。
(もとは、テキストファイルを.lzs形式で圧縮した状態で配布されています)

※なお、この正誤リストは邦訳2ndの初期のものに対するもので、現在の邦訳は
この正誤表がそれなりに反映されたものになっているらしいです。

※あとこちら でも正誤頁をかかれています。

原著の間違い まえがき 目次 0章 1章 2章 3章 4章 5章 6章 7章 付録A

☆ K&R 2nd.邦訳書の正誤リスト ☆



                         91/11/24  by Psycho

 K&R 2nd. はC言語の最も基本的な文献でありながら、邦訳書には意味不明の個
所が多く、読んでいるうちにイヤになってきます。実は私もこの本を通読したこ
とはなかったのですが、思い立って、数ヵ月前に原著を買ってきて、邦訳書と並
べて通読してみました。そして、誤訳・悪訳の多さに驚きました。これでは、読
んでわからないのは当然です。言語仕様に関する誤解の元になる場合もあるでし
ょう。
 そこで、これら誤訳・悪訳・誤植とその訂正の一覧を作成してみました。C言
語のユーザは英語に強い人ばかりではないので、信頼できるのは原著だけという
のでは具合が悪いだろうからです。
 K&R 1st. の邦訳書もついでに読み比べてみましたが、なんと、その誤訳・悪訳
がほとんどそのまま 2nd. に引き継がれています(私は 1st. の原著は持ってい
ないが)。出版されて何年もたつのに、だれも教えてあげなかったのでしょうか。
それとも問題の個所が多すぎて、知っている人もあきらめていたのでしょうか
(このリストを書き出すだけでも大変な作業だった。これをダウンロードして邦
訳書と突き合わせて読むのも、かなりの手間であろう)。それはともかく、1st.
の邦訳書が出たのはC言語に関する日本語の本のないころだったので、間違いが
あっても、これを日本に紹介された石田先生の功績は大きかったのですが、2nd.
ともなれば翻訳に正確を期してもらいたかったと思います。

 まず、この正誤表についての注釈を書いておきます。

 使った本は次のものです。

  Brian W. Kernighan & Dennis M. Ritchie
    "The C programming language", 1988, 1978.
    Prentice Hall, ISBN 0-13-110362-8 (pbk.)
    /* 表紙に SECOND EDITION と書かれ、ANSI C という赤スタンプのプリ
    ントされた版。ペーパーバック */

  石田晴久
    「プログラミング言語C 第2版 − ANSI 規格準拠」
    共立出版、1989 年 6 月 15 日、初版1刷

 最近の印刷では誤植はかなり直されているようですが、誤訳・悪訳はほとんど
直っていないようです。

 以下のリストでは、次の順序で問題点を書き出しています。

  1.章節の番号、邦訳書のページ、行(見出しは1行に数えるが、空行およ
    び図は数えない)
  2.邦訳書の訳
  3.正しい訳

 原文を引用すると、センテンスを丸ごと引用しなければならず、長くなるので、
原文は省略しました。原文は原著を見てください。
 一見ささいな訂正でも、前後の文脈の中でキチンと読むと、原訳とはまるで意
味の違っているものが多くありますから、注意してください。訂正する字句を小
幅にとどめ、かつ引用を短くしたために、このリストだけでは意味がわからない
ようになっています。

 邦訳書の底本は、私の持っている原著(いわゆる最終版)と違っているのでは
ないかと思われるフシがあります。実際、「訳者まえがき」にあるように、最終
版そのものでなく、Based on Draft-Proposed ANSI C という副題の付いた予備版
に、原著者からの電子メールによって修正を加えたものを底本としたようです。
しかし、その内容は確かめようがありません。

 段落の区切りの違い、活字の字体の不統一等もありますが、それは以下のリス
トには含めていません。原文と明らかに違っていても、誤解の恐れがないと思わ
れるささいな違いは、明らかな誤訳・誤記・誤植以外は、だいたい省略しました。
もっと読みやすい日本語で訳したいと思う個所は多くありますが、これをやりだ
すとキリがなくなるので、特に気になる個所以外はやっていません。
 索引の正誤は確かめていません。
 原著には 1st. edition の Preface が残されていますが、邦訳書では削除され
ています(こういう歴史的文書は残しておいたほうが良いと思う)。第2版日本
語版へのまえがきは、もちろん原著にはありません。また、原著の目次では付録
A、付録Bの節が載っているのに、邦訳書では省略されています(これもあった
ほうが便利である)。

 第1章、第3章で、for の第3式が訳書では「再初期化」となっているところ
を、「インクレメント」と直しましたが、これは原文 (increment) に合わせたま
でで、「再初期化」(re-initialization) が間違いだというわけではありません。
 initializer は「初期値」「初期値式」の二通りの訳がされていますが、「初
期値式」に統一しました。「初期設定子」といった訳語のほうが他の用語とのバ
ランスの上で良いと思いますが。

 訳文の問題のほか、原文の問題も少しばかりあります。ことに付録A、付録B
は圧縮されすぎていて、C言語をよく知らない人には理解できないのではないか
と思われます。これは、知っている人のためのメモだと思ったほうがよさそうで
す。


☆ 原著の間違い 

 翻訳の間違いを書き出す前に、原著の誤記を訂正しておく必要があります。表
現が適切でない(わかりにくい、省略されすぎている)と思われるところは他に
もいろいろありますが、次の3個所は明白な誤記でしょう。これを邦訳書の個所
で示します。

2.12  p.65  l.18(表2-1)
訳書  () [] -> .
    ! ~ ++ -- + - * & (type) sizeof
正   () [] -> .            (後置)++ --
    ! ~ + - * & (type) sizeof  (前置)++ --

6.2   p.160  l.4
訳書  struct rect r, *rp = r;
正   struct rect r, *rp = &r;

A12.3  p.289  l.14
訳書  ・・対応するパラメータ・・
正   ・・対応する引数・・


☆ 邦訳書の正誤一覧

 以下が、誤訳等とその訂正のリストです。


    <まえがき>


    p.iii  l.18
訳書  同時に、この言語のどの側面がマシン独立になっているかも明白に記述
    されている。
正   同時に、この言語のどの側面がマシン依存として残されているかも明白
    に記述されている。


    <目次>


    p.ix  l.5
訳書  1.2 変数と算術
正   1.2 変数と算術式

    p.xi  最下行
訳書  (脱落)
正   7.7 行の入出力 .........................................200


    <第0章>


    p.1   l.10
訳書  Cに対する BCPL の影響は間接的にはB言語からきた。
正   Cに対する BCPL の影響はB言語を通して間接的にきたものである。

    p.4   l.10
訳書  この標準化のおかげで、移植上で問題となる点を明確に示し、プログラ
    ムを走らせる計算機に固有な一群の定数を決めることが可能となる。
正   標準規格は、移植上で問題となる点を明示し、プログラムを走らせる計
    算機に固有な一群の定数を規定している。

    p.5   l.3
訳書  ただそうはいっても断片的な知識というよりは、完全なプログラムの例
    に重きを置いている。
正   ただそうはいっても重点は実例に、それも断片的なものよりは完全なプ
    ログラムの例に置いている。

    p.5   l.18
訳書  ・・移植をどう高めるか・・
正   ・・移植性をどう高めるか・・


    <第1章>


    p.6   l.2
訳書  われわれの目的は・・現実のプログラムにかかわるC言語の本質を示す
    ことである。
正   われわれの目的は・・実際のプログラムによってC言語の本質的要素を
    示すことである。

    p.6   l.9
訳書  ・・それに数多くのこまごました機能などである。
正   ・・それに標準ライブラリなどである。

    p.6   l.11
訳書  最も大きなものは、特定言語の特徴について、まとまった話が一箇所に
    まとまらないことと、
正   最も大きなものは、言語の特定の特徴について、まとまった話がここに
    はないことと、

    p.6   l.13
訳書  それから、例だけではCの全機能が使えないから、例は意図したほど簡
    潔にもエレガントにもなりえない恐れがある。
正   それから、この章の例ではCの全機能が使えないから、それを使った場
    合ほど簡潔にもエレガントにもならない。

1.1   p.9   l.9
訳書  ・・文字列または列定数と呼ぶ。
正   ・・文字列または文字列定数と呼ぶ。

1.2   p.10  l.10
訳書  1.2 変数と算術
正   1.2 変数と算術式

1.2   p.11  l.2, l.19
1.2   p.14  下から3行目
訳書  /* f=0,20,...
正   /* fahr=0,20,...

1.2   p.11  l.24
訳書  入れる場合は、空白 (blank) あるいは改行が書けるところ・・
正   入れる場合は、空白 (blank)、タブあるいは改行が書けるところ・・

1.2   p.11  下から2行目
訳書  これら int と float の精度は使用する特定の計算機に左右される。
正   これら int と float の範囲は使用する特定の計算機に左右される。

1.2   p.13  l.3
訳書  いずれの場合も、while で制御される文は1個の tab ストップで字下げ
    して、
正   いずれの場合も、本書では while で制御される文は1個の tab ストッ
    プで字下げして(これを本書ではご覧の通り4ケタのスペースとしてい
    るが)、

1.2   p.13  l.12
訳書  摂氏の温度を求めるのは次の式である。
正   摂氏の温度は次の式で計算されて変数 celsius に代入される。

1.2   p.13  下から7行目
訳書  ・・引数の一つをどこに代入すべきか、
正   ・・引数の一つによって置換されるべき場所と、

1.2   p.14  l.3
訳書  printf は単に、Cプログラムで通常使える標準のライブラリ・ルーチン
    の一部である一つの有用な関数にすぎない。printf のふるまいは、
    ANSI 標準規格で定義されているが、
正   printf は単に、Cプログラムで通常使える標準ライブラリの一つの有用
    な関数にすぎない。しかし、printf のふるまいは ANSI 標準規約で定義
    されており、

1.2   p.15  下から8行目
訳書   整数が浮動小数点数にいつ変換されるかの詳しい規則は・・
正    整数が浮動小数点数に変換される時の詳しい規則は・・

1.2   p.16  l.9
訳書  %0.2f
正   %.2f

1.3   p.16  下から10行目
訳書   周知のように、プログラムを書くにはいろいろのやり方がある。
正    同じ仕事をするプログラムを書くにも、いろいろのやり方がある。

1.3   p.17  l.17
1.5.2  p.23  l.19
訳書  ・・再初期化・・
正   ・・インクレメント・・

1.3   p.17  下から6行目
訳書  また初期化と再初期化の部分は、一つの式なら何でも許される。
正   初期化、条件、インクレメントはどんな式でもよい。

1.3   p.17  下から2行目
訳書  ・・初期化と再初期化が一つの式であって、
正   ・・初期化とインクレメントがともに一つの式であって、

1.4   p.18  l.6
訳書  これは、プログラムを後で読まなければならない人には、たいした意味
    をもたないし、
正   これは、プログラムを後で読まなければならない人には、ほとんど意味
    がわからないし、

1.5   p.19  l.7
訳書  このテキスト・ストリームは、行に分割された文字列である。
正   このテキスト・ストリームは、行に分割された文字の継起である。

1.5   p.19  下から6行目
訳書  ・・画面に整数変数 c の内容を示すのに使われる。
正   ・・画面に整数変数 c の内容を文字として示すのに使われる。

1.5.1  p.21  l.2
訳書  といった任意の代入文は、式の中に書ける。その値は、単に左辺に代入
    される値である。
正   といった任意の代入文は式であり、値を持つ。この値は、代入後の左辺
    の値である。

1.5.1  p.21  l.15
訳書  ついで、繰り返される入力が最後に終りとなると、
正   ついで、while が繰り返される。入力の終りにくると、

1.5.1  p.21  l.17
訳書   このプログラムは入力を中心にすえている−−いまや getchar の呼出
    しは一つしかない−−から、短くなっている。テストの中に代入文を埋
    め込むことは、Cに許される貴重な圧縮記法の一つである。
正    このプログラムは入力を一か所にまとめている−−いまや getchar の
    呼出しは一つしかない−−から、短くなっている。できたプログラムは
    より簡潔になり、この慣用句をマスターしてしまえば、読みやすくもな
    る。

1.5.2  p.23  l.17
訳書  %0f では存在しない少数部の印字が抑制される。
正   %.0f では存在しない少数部の印字が抑制される。

1.5.2  p.23  下から2行目
訳書  ・・保証しているといえる。
正   ・・確実にするのに役立つ。

1.5.3  p.24  最下行
訳書  ・・判定文や式の中でも、'\n' は改行コードの値を表わす。
正   ・・'\n' は改行コードの値を表す。この値は ASCII では 10 である。

1.5.4  p.25  l.12
訳書  ・・空白やタブや改行を含まない任意の文字列・・
正   ・・空白やタブや改行を含まない任意の文字の並び・・

1.5.4  p.27  l.8
訳書  どちらの文ももっと複雑にすることが可能である。
正   どちらの文も単文でもよく、大カッコに囲まれたいくつかの文でもよい。

1.5.4  p.27  l.14-16
訳書   演習 1-13 ・・
正   (削除)

1.6   p.28  下から2行目
訳書  幸いこれは通常の文字セットすべてに当てはまる。
正   幸いこれはどの文字セットにも当てはまる。

1.6   p.30  l.1
訳書   演習 1-14
正    演習 1-13

1.6   p.30  l.4
訳書  (ない)
正    演習 1-14 入力中の異なる文字の頻度をヒストグラムにプリントする
    プログラムを書け。

1.7   p.30  l.7
訳書  関数は実際、大きなプログラムに潜在する複雑さに対処するただ一つの
    方法となる。
正   (削除)

1.7   p.30  l.11
訳書  たった2〜3行しかなくて、1回しか呼ばれない関数を見かけることが
    よくあるが、それは断片的なプログラムをわかりやすく、はっきりとさ
    せるために使われているのである。
正   短くて、1回しか呼ばれない関数を見かけることがよくあるが、それは
    プログラムをわかりやすくするために使われているのである。

1.7   p.31  l.1
    p.33  l.6
訳書  /* power: base を n のベキ乗する ; n >= 0 */
正   /* power: base を n 乗する ; n >= 0 */

1.7   p.31  下から2行目
訳書  ・・およびこの関数が返す結果の宣言になっている。
正   ・・およびこの関数が返す結果の型の宣言になっている。

1.8   p.34  l.4
訳書  これは呼び出された関数には、元の値ではなく一時変数の中の引数の値
    が与えられることを意味する。
正   これは呼び出された関数には、呼出し元の変数ではなく一時変数によっ
    て引数の値が与えられることを意味する。

1.9   p.35  l.9
訳書  while (別の行がある)
正   while (まだ行がある)

1.9   p.35  下から7行目
訳書  どの行にも最低1文字はあるはずだし、改行文字だけの行でも長さは1
    になるはずだからである。
正   どの行にも最低1文字はあるはずである。改行文字だけの行でも長さは
    1になるからである。

1.9   p.36  l.2
1.10  p.39  l.14
訳書  /* 入力の最大行数 */
正   /* 入力の最大行長 */

1.9   p.37  l.8
訳書  ・・ min ・・
正   ・・ main ・・

1.9   p.37  下から6行目
訳書  copy を調べてみれば、それが入力引数 \0 で終っていて、この文字を出
    力引数へコピーするという事実を使っていることがわかるであろう。
正   copy も、入力引数は \0 で終っているという事実を使って、この文字を
    出力引数にコピーしている。

1.9   p.37  下から3行目
訳書   このプログラムを離れるに当たって、こういった小さなプログラムに
    は、幾分まずい点があることをお断りしておく。
正    ついでに大事なことを言っておきたい。これほど小さなプログラムで
    あっても、設計上のやっかいな問題を提起しているということである。

1.9   p.37  下から2行目
訳書  ・・行数・・
正   ・・行長・・

1.10  p.38  下から6行目
訳書  (第4章では、静的な記憶クラスについて述べる。)
正   (第4章では、static 記憶クラスについて述べる。static であれば局
    所変数は、関数の呼び出しから呼び出しの間もその値を保持している)

1.10  p.40  下から11行目
訳書  ・・先の例・・
正   ・・上の例・・

1.10  p.40  下から10行目
訳書  構文的には、外部変数の定義はこれまで行ってきた宣言と同じである。
正   構文的には、外部変数の定義は局所変数の定義と同じである。

1.10  p.42  l.11
訳書   演習 1-22 長い入力行を、入力の n 文字目にある最後の非ブランク
    文字の後で、“折りたたむ”プログラムを書け。
正    演習 1-22 長い入力行を、入力の n 文字目までにある最後の非ブラ
    ンク文字の後で、“折りたたむ”プログラムを書け。


    <第2章>


    p.43  下から9行目
訳書  永く待たれていた機能を承認する形で、
正   永く使われてきた機能を承認する形で、

2.1   p.43  下から3行目
訳書  まず、第1文字は英字でなければならない。
正   まず、名前は英字と数字で作られ、第1文字は英字でなければならない。

2.1   p.43  下から2行目
訳書  ・・用いられる。
正   ・・用いられる。しかし、下線で始まる変数名は使わないようにしたい。
    この種の名前はライブラリルーチンでよく使われるからである。

2.1   p.44  l.3
訳書  外部名は、標準規格では6文字、しかも1段(大文字か小文字)につい
    てしか一義性が保証されていない。
正   外部名は、標準規格では6文字、しかも大文字と小文字の区別をしない
    範囲でしか一義性が保証されていない。

2.2   p.44  l.13
訳書   char  1バイト、局所的な文字セット内に1文字を保持しうる
正    char  1バイト、ローカルな文字セット内に1文字を保持しうる

2.2   p.44  下から8行目
訳書   これを使う意図は、可能な限り、short と long には異なる長さの整
    数を与えるべきだということにある。
正    この意図は、可能な限り、short と long によって異なる長さの整数
    を使えるようにすべきだということにある。

2.2   p.45  l.7
訳書  float と double と long double とがそれぞれ1,2,3の異なる大き
    さになっていることもありうる。
正   float と double と long double とは同じサイズのこともあれば、2〜
    3種の異なるサイズになっていることもある。

2.2   p.45  l.12
訳書   演習 2-1 ・・標準ヘッダからの適当な値と直接の計算で求めた値と
    を印字することによって、それらの範囲を決めるプログラムを書け。
正    演習 2-1 ・・それらの範囲を決めるプログラムを、標準ヘッダから
    の適当な値を印字することと、直接計算することとの双方で書け。計算
    しようとすると困難であるが、各種の浮動小数点型の範囲を決定せよ。

2.3   p.48  l.4
訳書  以下にその使用例を示す。
正   以下にその版の一つを示す。

2.3   p.48  l.15
訳書  strlen その他の文字列関数の宣言には標準ヘッダ <string.h> を使う必
    要がある。
正   strlen その他の文字列関数は標準ヘッダ <string.h> で宣言されている。

2.4   p.49  最下行
    p.50  l.3
訳書  ・・初期値・・
正   ・・初期値式・・

2.4   p.49  下から2行目
訳書  ・・初期化は初めに1回だけ、概念的にはプログラムの始まるときに行
    われるから、初期値は定数式でなければならない。
正   ・・初期化は1回だけ、概念的にはプログラムの始まる前に行われるか
    ら、初期値式は定数式でなければならない。

2.4   p.50  l.3
訳書  ・・不定なの・・
正   ・・不定の・・

2.7   p.52  l.4
訳書  で c へ代入および '\n' との比較で望ましい結果を得るには・・
正   で c に代入した後で '\n' と比較して望む結果を得るには・・

2.7   p.55  l.11
訳書  問題は、signed と unsigned とが・・
正   問題は、signed と unsigned の比較が、・・

2.7   p.56  l.8
訳書  この式は上記の変換規則に従ってその型名に変換される。キャストの正
    確な意味は、式があたかも指定した型をもつ変数のように代入され、そ
    の構文の中で使われるということである。
正   この式は上記の変換規則に従って指定された型に変換される。キャスト
    の正確な意味は、式があたかも指定した型の変数に代入されたかのよう
    に、その構文の中で使われるということである。

2.7   p.56  l.15
訳書  ・・自身は変化しない・・
正   ・・ n 自身は変化しない・・

2.7   p.56  l.17
訳書   引数は関数のプロトタイプによって宣言すべきだが、そうなっていな
    い場合は、
正    引数は関数のプロトタイプによって宣言すべきだが、その場合は、

2.9   p.60  l.17
訳書  後者は左から右に真の値を評価してゆく。
正   後者は左から右に真理値を評価してゆく。

2.9   p.61  l.12
訳書  ~0 ではビットが 1 になる。
正   ~0 ではすべてのビットが 1 になる。

2.9   p.61  l.14
訳書  ・・右側 n ビットが 1 のマスクになるのである。
正   ・・右側 n ビットが 1 であるマスクができあがる。

2.10  p.63  下から10行目
訳書   演習 2-9 2の補数系では、x & (x-1) により、x の右端の1ビット
    が消える。
正    演習 2-9 2の補数のシステムでは、x &= (x-1) により、x の最も右
    の1のビットが消える。

2.11  p.64  l.11
訳書  は、n が正であろうとなかろうと double 型に変換される。
正   は、n が正であろうとなかろうと float 型に変換される。

2.11  p.64  下から10行目
訳書  ・・各行は一つの改行文字で終了するように・・
正   ・・各行は(最後の行を含めて)一つの改行文字で終了するように・・

2.12  p.66  l.2
訳書  したがって、もし f と g のどちらか一方が外部変数を変更し、その変
    数が他方に従属しているなら、
正   したがって、もし f と g のどちらか一方が変数を変更し、他方がその
    変数に依存しているなら、

2.12  p.66  下から10行目
訳書  こうした問題には、標準規格ではわざと触れていない。
正   こうした問題は、標準規格ではわざと規定していない。式において


    <第3章>


3.2   p.68  l.13
訳書  if (式 != 0
正   if (式 != 0)

3.2   p.68  l.17
訳書  if-else の else 部も省略可能だから、
正   if-else の else 部は省略可能だから、

3.3   p.70  l.5
訳書  各文の内容は・・
正   いつもと同様に、各文の内容は・・

3.3   p.70  l.18
訳書  ・・配列 v の中間の要素と比較する。もしも x が中間値よりも小さけ
    れば・・
正   ・・配列 v の中央の要素と比較する。もしも x が中央の値よりも小さ
    ければ・・

3.4   p.72  下から9行目
訳書  よい点は、多重の case で単一動作が可能となることである(上例の場
    合はブランク、タブおよび改行でそうしている)。
正   よい点としては、この例の数字の場合のように、いくつもの case を一
    つの動作に結び付けることができる。

3.5   p.73  下から8行目
訳書   文法的には・・
正   ただし、continue の動作は別である。これについては 3.7 節で述べる。
     文法的には・・

3.5   p.73  下から6行目
訳書  式1と式3が省略されたら単に下へ落ちるだけである。
正   式1や式3は省略されれば、単にそれが展開されないだけである。

3.5   p.74  l.7
訳書  ・・再初期化・・
正   ・・インクレメント・・

3.5   p.74  l.14
訳書  ・・インデックス変数 i がその値をもっている点で、
正   ・・インデックス変数 i がその値を保持している点で、

3.5   p.74  下から8行目
訳書  ・・省略可能な先頭のスペースや、付けても付けなくてもよい + や -
    もちゃんと処理するようになっている。
正   ・・先頭にスペースがある場合や、+ や - の符号がある場合もちゃんと
    処理するようになっている。

3.5   p.75  l.21
訳書  ・・このソート・アルゴリズムの基本概念は、単純な交換整列のように、
    初期の段階で隣接した要素間ではなく、遠く離れて比較を行うことにあ
    る。
正   ・・このソート・アルゴリズムの基本概念は、初期の段階では、単純な
    交換整列のような隣接した要素間の比較ではなく、遠く離れた要素間の
    比較を行うことにある。

3.5   p.75  l.25
訳書  比較された要素間の間隔は、しだいに1になるまで減少され、その時点
    でこの整列法は隣接交換法に移る。
正   比較される要素間の間隔はしだいに小さくなり、1になるとこの整列法
    は事実上、隣接交換法になる。

3.5   p.76  l.3
訳書  真中のループでは、gap 分だけ離れた二つずつの要素を比較する。最も
    内側のループでは順番になっていない二つの要素を入れ換える。
正   真中のループは要素に沿って進む。最も内側のループでは、gap 分だけ
    離れた二つずつの要素を比較し、順番になっていない要素を入れ換える。

3.5   p.76  l.11
訳書  例えば、二つの添字の並列処理が可能である。これを文字列 s を逆順に
    する関数 reverse(s) で次に示す。
正   例えば、二つのインデックスの並列処理が可能である。これを文字列 s
    をその位置で逆順にする関数 reverse(s) で次に示す。

3.5   p.76  l.14
訳書  /* reverse: 文字列 s を逆順にする */
正   /* reverse: 文字列 s をその位置で逆順にする */

3.5   p.76  下から5行目
訳書  ・・要素の交換は一つの操作と考えることができないから、
正   ・・要素の交換は一つの操作と考えることができるから、

3.5   p.77  l.3
訳書  (これは、先頭および最後の - を文字とみなすとやりやすい。)
正   先頭および最後の - は文字とみなすことにする。

3.6   p.77  l.17
訳書   予想されるように、
正    経験によると、

3.6   p.78  l.14
訳書  とくに n を 16 進文字に変換する itob(n,s,16) も書いてみよ。
正   とくに itob(n,s,16) は n を s 中の 16 進文字に変換する。

3.6   p.78  l.17
訳書  幅を拡張する必要があれば、
正   幅を確保するために必要なら、

3.7   p.78  下から7行目
訳書   以下に示す trim 関数は、入力の各行の終りから後側の空白とタブと
    改行文字を取り除き、一番右側がブランクでもタブでも改行文字でもな
    いときには、break 文を用いてループを抜け出すプログラムである。
正    以下に示す trim 関数は、文字列の末尾から余分な空白とタブと改行
    文字を取り除いてゆき、ブランクでもタブでも改行文字でもない最も右
    側の文字が見つかったところで、break 文を用いてループを抜け出すプ
    ログラムである。

3.7   p.79  下から6行目
訳書  ・・その結果テストを逆にしたり、他のレベルを字下げして書くことで、
正   ・・その結果、テストをさかのぼったり、もう一段レベルを字下げして
    書くことで、

3.8   p.79  下から2行目
訳書  公式には goto は必要なく、実際それを使わないでプログラムを書くほ
    うがたいていの場合簡単である。
正   形式としては goto は決して不可欠のものではない。実際にも、それを
    使わないでプログラムを書くのはたいていの場合簡単である。


    <第4章>


    p.82  l.3
訳書  関数をうまくつくれば、プログラムの各部の操作の詳細部を隠すことが
    できるし、細部について知らなくても、全体を明確化し、プログラム変
    更を容易にすることもできる。
正   関数をうまくつくれば、知る必要のないプログラムの各部の操作の詳細
    を隠すことができるし、全体を明確化し、プログラム変更を容易にする
    こともできる。

4.1   p.83  下から6行目
訳書  それを印字する”・・
正   “それを印字する”・・

4.1   p.86  l.16
訳書  例えば main.c にエラーがあった場合、そのファイルと以前のオブジェ
    クトからロードされた結果は再コンパイルすることができる。
正   例えば main.c にエラーがあった場合、そのファイルだけを再コンパイ
    ルし、その結果を以前のオブジェクトとともにロードすることができる。

4.2   p.87  下から2行目
訳書  ・・それらをすべて加えてその合計を各入力の後に印字する・・
正   ・・それらを加えてゆき、各入力ごとに累計を印字する・・

4.2   p.89  下から2行目
訳書  ここで、浮動小数点数のうしろには、e や E が続いて、指数部に符号が
    付いてもよいとする。
正   ここで、浮動小数点数のうしろには、e や E と符号の付き得る指数部が
    続いてもよいとする。

4.3   p.90  下から2行目
訳書  ここでの問題は、以前よりもよりよい電卓プログラムをもう一つ書くこ
    とである。このため +,-,*,/,=(答を印字するため)を許すことにする。
    実現をよりやさしくするために、この電卓プログラムではカッコを使わ
    ず逆ポーランド記法を使用する。(逆ポーランド記法は、ポケット電卓
    で使われている方式である。)
正   ここでの問題は、演算子として +,-,*,/ が使える電卓プログラムを書く
    ことである。実現をやさしくするために、この電卓プログラムでは挿入
    記法を使わず逆ポーランド記法を使用する。(逆ポーランド記法は、あ
    る種のポケット電卓や Forth や Postscript のような言語で使われてい
    る方式である)。

4.3   p.91  l.4
訳書  ・・カッコ付きの式
正   ・・挿入記法の式

4.3   p.92  l.1
訳書  ・・ほうがよい。
正   ・・ほうがよい。さらに、入力から次の演算子や被演算数を取り出すた
    めの別個の関数が必要である。

4.3   p.92  下から7行目
訳書   #include stdlib.h>
     #include <math.h>    /* atof() 用 */
正    #include <stdio.h>
     #include <stdlib.h>   /* atof() 用 */

4.3   p.94  l.14
訳書  /* pop: スタックをポップし、一番上の値を返す */
正   /* pop: スタックから一番上の値をポップして返す */

4.3   p.96  下から8行目
訳書   演習 4-4 ・・追加せよ。
正    演習 4-4 ・・追加せよ。スタックをクリアするコマンドを追加せよ。

4.4   p.97  下から9行目
訳書   名前の通用範囲 (scope) は、その名前が定義されるプログラムの部分
    である。
正    名前の通用範囲 (scope) は、その名前を使うことができるプログラム
    の部分である。

4.4   p.97  下から3行目
訳書  ・・上に示した順序で定義される。
正   ・・上に示した順序で定義されるとする。

4.4   p.98  l.4
訳書  ・・変数 val と sp は push および pop では単にその名前をあげるだ
    けで使用できる。
正   ・・変数 val と sp は push および pop では単にその名前で使用でき
    る。

4.4   p.98  l.9
訳書  ・・(型やサイズなど)・・
正   ・・(主としてその型)・・

4.4   p.98  l.13
訳書  がどれかの関数の外に現れたとすると、
正   がどの関数にとっても外側に現れると、

4.4   p.98  下から3行目
訳書  ・・可能である。
正   ・・可能である。
     外部変数の初期化は定義の中でしかされない。

4.4   p.99  l.1
訳書  このとき、これらの定義と宣言はそれらを一緒に結び付けるのに必要と
    なる。
正   このとき、次のような定義と宣言がそれらを一緒に結び付けるのに必要
    となる。

4.6   p.100  下から2行目
訳書  ・・それぞれのソース・ファイルにおいて、関数の内輪で使用するため
    のもので、
正   ・・それぞれのソース・ファイル中の関数で内輪で使用するためのもの
    で、

4.6   p.101  l.3
訳書  したがって、外部的に static な変数は getc と ungetch の組合せにお
    ける buf や bufp のような名前を隠す方法になっている。それらは外部
    的で、したがって共有できなければならないが、衝突を避けるために、
    getch と ungetch のユーザには見えるべきものではない。
正   したがって、外部的な static は getch と ungetch の組合せにおける
    buf や bufp のような名前を、隠す方法になっている。それらは共有で
    きるためには外部的でなければならないが、getch と ungetch のユーザ
    には見えるべきものではない。

4.6   p.101  l.13
訳書  実際には、これらは、同じプログラムの他のファイルの中であれば、同
    じ名前との衝突は起こらない。
正   これらは、同じプログラムの他のファイル中の同じ名前とは衝突しない。

4.8   p.103  l.6
訳書  において変数の通用範囲は、if の“真”の分岐内となる。この i はプ
    ログラム中の他の i とは無関係である。
正   において変数 i の通用範囲は、if の“真”の分岐内となる。この i は
    ブロックの外のどの i とも無関係である。

4.8   p.103  l.19
訳書  f の外側では x の指すのは外部の整数である。
正   f の外側では x が参照するのは外部的な int である。

4.9   p.103  下から8行目
訳書   初期化については今まで何度か取り上げてきたが、常にトピックの付
    け足しであった。本節では、すでに論じた各種の記憶クラスに関して、
    いくつかの規則をまとめて示すことにする。
正    初期化については今まで何度か事のついでに触れてきたが、常に他の
    トピックの付け足しであった。今、各種の記憶クラスを論じたところで、
    本節でいくつかの規則をまとめて示すことにする。

4.9   p.103  下から2行目
訳書  ・・定数式・・
正   ・・式・・

4.9   p.104  l.4,  下から6行目,  下から2行目
    p.105  l.1,  l.2
訳書  ・・初期値・・
正   ・・初期値式・・

4.9   p.104  l.7
訳書  ・・初期化・・
正   ・・初期値式・・

4.9   p.104  l.4
訳書  初期化は、概念的にはコンパイル時に一度だけ行われる。
正   初期化は、概念的にはプログラムの実行が始まる前に一度だけ行われる。

4.10  p.105  l.17
訳書  配列の初期値式が指定された数より少ないときには、外部変数、静的変
    数、自動変数については、残りの要素は 0 となる。
正   (削除)

4.10  p.105  下から11行目
訳書  ・・負数の数・・
正   ・・負の数・・

4.11.2 p.110  l.5
訳書   引用符付きの文字列の中には仮引数は入れられない。
正    引用符付きの文字列の中では仮引数は置換されない。

4.11.2 p.111  l.3
訳書   演習 4-14 型 t の二つの int 引数・・
正    演習 4-14 型 t の二つの引数・・


    <第5章>


    p.113  l.2
訳書   ポインタは他の変数のアドレスをもつ変数であり、
正    ポインタは他の変数のアドレスを内容とする変数であり、

    p.113  l.4
訳書  ・・他の方法で得られるよりもっとコンパクトで・・
正   ・・他の方法で得られるより通常はもっとコンパクトで・・

    p.113  l.7
訳書   一方、ポインタは goto 文と共に、理解することの不可能なプログラ
    ムをつくってしまうもとになることも多い。
正    ポインタは、理解することの不可能なプログラムをつくってしまうも
    ととして、goto 文と並び称されてきた。

5.1   p.114  l.2
訳書  ポインタは・・のグループを指す。
正   ポインタは・・のグループである。

5.1   p.114  l.5
訳書  単項演算子 & はオブジェクトのアドレスを示すから、
正   単項演算子 & はオブジェクトのアドレスを与えるから、

5.1   p.114  下から4行目
訳書  ・・は記号表現として、
正   ・・は表記法として設けられたもので、

5.1   p.114  下から3行目
訳書  ・・変数が現われ得る式の構文を真似たものである。
正   ・・変数が現われる際の式の構文を真似たものである。

5.1   p.115  l.14
訳書  ・・ip の指すものが何であれ、それに 1 が加えられて、
正   ・・ip の指すものが何であれ、それが取り出され、1 が加えられて、

5.2   p.116  l.4
訳書   Cでは関数に対して、引数を“値による呼出し(call by value)”で渡
    すから、
正    Cでは関数に対して、引数を値で渡すから、

5.2   p.116  下から5行目
訳書  ・・実際の被演算数はそのポインタを用いてアクセスされる。
正   ・・実際の被演算数はそのポインタを通して間接的にアクセスされる。

5.2   p.117  下から9行目
訳書  どのような値が EOF として使用されていても、それが仮に入力整数の値
    となりうるものであってもである。
正   どのような値が EOF として使用されていても、それは入力整数の値とも
    なりうるものだからである。

5.2   p.117  下から7行目
訳書   一つの解法は getint では、ファイルの終りで、その関数値として
    EOF を返させ、それ以外の戻り値としては通常の整数を返させるように
    することである。
正    一つの解法は getint では、その関数値としてファイル終了状態を返
    させ、変換された整数を格納して呼出し元の関数に戻すのにポインタ引
    数を使うことである。これは scanf でも使われている方式である(7.4
    節を参照)。

5.2   p.118  l.9
訳書  /* getint: 次の整数を *pn に入れる */
正   /* getint: 入力から次の整数を取り出して *pn に入れる */

5.2   p.118  下から8行目
訳書  ここでは、次に読むべき1文字を入力に返すことができるように・・
正   ここでは、余分に読まざるを得ない1文字を入力に戻すことができるよ
    うに・・

5.2   p.118  下から2行目
訳書  ・・どのような型のデータをその数値として返すか?
正   ・・どのような型のデータをその関数値として返すか?

5.3   p.119  l.2
訳書  この関係は、ポインタと配列を同等に取り扱ってよいくらいに強い。
正   この関係が強いので、ポインタと配列を同時に論じなければならない。

5.3   p.119  l.8
訳書  ・・オブジェクトからなるブロックを指す。
正   ・・オブジェクトからなるブロックである。

5.3   p.119  l.9
訳書  a[i] という記法は、先頭から i 番目の位置の配列要素を意味する。
正   a[i] という記法は、先頭から i 番目の位置の配列要素を参照する。

5.3   p.119  下から5行目
訳書  このとき pa は a[0] のアドレスをもつ。
正   つまり pa は a[0] のアドレスを内容とする。

5.3   p.120  l.5
訳書  ・・は a[1] の内容を指す。
正   ・・は a[1] の内容を参照する。

5.3   p.120  l.7
訳書   これらの説明は、配列 a の変数の型にかかわらず当てはまる。“1 を
    ポインタに加えること”や、その拡張であるすべてのポインタ演算の定
    義から、
正    これらの説明は、配列 a の変数の型やサイズにかかわらず当てはまる。
    “1 をポインタに加えること”や、その拡張であるすべてのポインタ演
    算の意味は、

5.3   p.120  下から10行目
訳書  配列の名前はその要素の位置と同義であるから、
正   配列の名前はその先頭の要素の位置と同義であるから、

5.3   p.121  l.3
訳書  しかし配列名は変数ではなく定数である。
正   しかし配列名は変数ではない。

5.3   p.121  l.19
訳書  これは単に strlen 内のアドレスのプライベートなコピーを・・
正   これは単にポインタの strlen 内でのプライベートなコピーを・・

5.3   p.122  l.1
訳書  ・・それが配列として渡されたのかポインタとして渡されたのかが適当
    に判断され、それに応じた取扱いが行われる。適当で明白なときは、両
    者間で演算を行ってもよい。
正   ・・それが配列として渡されたのかポインタとして渡されたのかを適当
    に判断して、それに応じた取扱いをしてよい。適当で明白なときは、両
    者の記法を使ってもよい。

5.3   p.122  下から12行目
訳書  ・・とくに意味はない。
正   ・・とくに意味はない。
     要素の存在が確かなら、配列を逆方向にインデックスすることも可能
    である。つまり、p[-1], p[-2] 等は構文として正しく、p[0] のすぐ前
    の要素を参照する。もちろん、配列の限界内にないオブジェクトを参照
    するのは正しくない。

5.4   p.122  下から10行目
訳書   p がポインタであれば、p++ で p はインクレメントされ、p の指すオ
    ブジェクトの種類にかかわらず次の要素を指すようになる。
正    p が配列のどれかの要素へのポインタであれば、p++ で p はインクレ
    メントされ、次の要素を指すようになる。

5.4   p.123  l.11
訳書  実際のプログラムでは、この配列は名前さえももっていない。
正   実際のプログラムでは、この配列は名前さえも持つ必要がない。

5.4   p.123  l.12
訳書  ・・あるいは名前のないブロックへのポインタを・・
正   ・・あるいは名前のない記憶ブロックへのポインタを・・

5.4   p.123  l.16
訳書  ・・alloc が n 文字分要求したとき、
正   ・・alloc が n 文字分要求されたとき、

5.4   p.123  最下行
訳書  /* 空いている場所の大きさ */
正   /* 使用可能な場所の大きさ */

5.4   p.124  l.11
訳書  /* p によって指される空き領域 */
正   /* p によって指される領域を解放する */

5.4   p.124  l.21
訳書  配列名は0番目の要素のアドレスであるから、これはまた、
正   これはまた、

5.4   p.124  下から5行目
訳書  ・・ allocp の新しい値は、allocbuf の最後よりせいぜい1のところと
    なる。
正   ・・ allocp の新しい値は、最大でも allocbuf の最後を1つ越えたと
    ころとなる。

5.4   p.125  l.14
訳書  例えば、p が q よりも初めの方の要素を指していれば、
正   例えば、p が q よりも初めの方の配列要素を指していれば、

5.4   p.125  l.17
訳書  任意のポインタと NULL との一致または不一致を比較するのは意味があ
    る。しかし、異なる配列を指しているポインタ同士の演算や比較を行う
    と結果は不定となる。
正   任意のポインタとゼロを比較して一致または不一致をみるのは意味があ
    る。しかし、同じ配列のメンバーを指していないポインタ同士の演算や
    比較を行うと、結果は不定となる。

5.4   p.125  下から3行目
訳書  n は、p が指しているオブジェクトの大きさに応じて決められる。
正   n は、p が指しているオブジェクトの大きさに応じてスケールされる。

5.4   p.126  l.12
訳書  この宣言において、p は s、すなわち先頭の文字を指すように初期化さ
    れる。
正   この宣言において、p は s に初期化される。これは文字列の先頭の文字
    を指す。

5.4   p.126  下から3行目
訳書  ・・との比較である。二つのポインタの・・
正   ・・との比較である。他のポインタ演算はすべて不正である。二つのポ
    インタの・・

5.4   p.126  下から2行目
訳書  ・・ある型のポインタを他の型のポインタに代入することすらも許され
    ない。
正   ・・ある型のポインタをキャストせずに他の型のポインタに代入するこ
    とすらも許されない。

5.5   p.127  l.2
訳書  ・・文字定数列・・
正   ・・文字列定数・・

5.5   p.127  l.11
訳書  printf が受取るのは文字配列へのポインタである。
正   printf が受取るのは文字配列の先頭へのポインタである。つまり、文字
    列定数はその先頭の要素へのポインタによってアクセスされる。

5.5   p.128  l.5
訳書  次に標準入出力ライブラリにある二つの有用な関数を調べることによっ
    て、
正   次に標準入出力ライブラリにある二つの有用な関数の書き換え版を調べ
    ることによって、

5.5   p.128  l.7
訳書  このとき単に s=t といえばよいが、
正   このとき単に s=t とするのは楽であるが、

5.5   p.128  下から4行目
訳書  これらはポインタとして初期化されており、
正   ここではこれらは都合よく初期化されたポインタであり、

5.5   p.129  下から10行目
訳書  ・・その関数値として目的の文字列が返される・・
正   ・・その関数値としてコピー先の文字列が返される・・

5.5   p.130  l.16
訳書  ・・ * と ++,-- の組合せも可能である。
正   ・・ * と ++,-- の他の組合せも可能である。

5.5   p.130  l.21
訳書  /* スタックの一番上を val へ入れる */
正   /* スタックの一番上を val に降ろす */

5.5   p.130  下から3行目
訳書  ・・最大 n 文字を扱う strncpy, strncat および strncmp を書け。
正   ・・最大 n 文字を扱うライブラリ関数 strncpy, strncat および str-
    ncmp を書け。

5.5   p.131  l.1
訳書   演習 5-6 前章からの適当なプログラムや演習問題の答えを、
正    演習 5-6 これまでの章や演習の適当なプログラムを、

5.6   p.131  l.17
訳書  またポインタそれ自身は配列内に格納できる。
正   またポインタそれ自身は一つの配列に格納できる。

5.6   p.132  下から5行目
訳書  /* readlines: 入力を読み込む */
正   /* readlines: 入力行を読み込む */

5.6   p.133  l.12
訳書  /* writelines: 出力を書き出す */
正   /* writelines: 出力行を書き出す */

5.6   p.133  下から7行目
訳書  /* writelines: 行を書き出す */
正   /* writelines: 出力行を書き出す */

5.6   p.133  下から10行目
訳書   lineptr 自体は writelines に渡される配列であるから、・・この関
    数は以下のように・・
正    lineptr 自体は配列の名前であるから、・・writelines は以下のよう
    に・・

5.7   p.135  l.2
訳書  ・・Cでは長方形の多次元配列が使える。
正   ・・Cでは直交的な多次元配列が使える。

5.7   p.135  l.12
訳書  各月の日数は平年とうるう年とで異なっているから、計算で2月がどう
    なるかを求めるよりも、それを二つの列をもつ二次元配列に分けるほう
    が簡単である。
正   各月の日数は平年とうるう年とで異なっているから、2月がどうなるか
    を、計算中にずっとおぼえておくよりも、それを二次元配列中の二つの
    行に分けるほうが簡単である。

5.7   p.136  l.9
訳書  Cにおいては、二次元配列は実際には要素が配列となるような一次元配
    列となっている。
正   Cにおいては、二次元配列は実際には、それぞれの要素が一つの配列で
    あるような一次元配列である。

5.7   p.136  l.14
訳書  これ以外の点では、二次元配列は他の宣言とまったく同様に扱うことが
    可能である。
正   この記法以外の点では、二次元配列は他の言語とほぼ同様に扱うことが
    可能である。

5.7   p.136  l.15
訳書  ・・要素が記憶順にアクセスされるときは、最も右側の添字が最も早く
    変化する。
正   ・・要素がメモリーの順にアクセスされるときは、最も右側の添字、つ
    まり列が最も早く変化する。

5.7   p.136  l.19
訳書  ・・これは月の数が 0 から 11 までではなく 1 から 12 となっている
    ためである。
正   ・・これは月の番号を 0 から 11 までではなく、自然な 1 から 12 と
    するためである。

5.7   p.136  下から7行目
訳書  ・・関数の引数宣言には列の次元がなければならない。
正   ・・関数の引数宣言には列の数がなければならない。

5.7   p.136  下から5行目
訳書  ・・行の次元は無関係である。
正   ・・行の数は無関係である。

5.8   p.138  l.2
訳書  初期値は単に文字列の並びとなる。
正   初期値式は単に文字列の並びとなる。

5.8   p.138  l.4
訳書  配列 name の大きさは定義されていないから、コンパイラ自身で初期値
    が数えられ、正確な数が満たされる。
正   配列 name の大きさは指定されていないから、コンパイラ自身で初期値
    式が数えられ、正確な数が書き込まれる。

5.9   p.138  l.8, l.15
訳書  ・・宣言・・
正   ・・定義・・

5.9   p.138  l.14
訳書  ・・要素 a[row,col] を求めるには従来の長方形の添字計算・・
正   ・・要素 a[row,col] を求めるには通常の直交的な添字計算・・

5.10  p.139  下から10行目
訳書  2番目の引数(argument vector の意味で argv)は、引数を含む文字列
    の配列を指すポインタで、そのポインタ文字列ごとに一つある。
正   2番目(argument vector の意味で argv)は、引数を内容とする文字列
    の配列を指すポインタで、その文字列一つが引数一つに対応する。

5.10  p.141  l.1
訳書  argv は引数の文字列の配列へのポインタであるから、
正   argv は引数文字列の配列の先頭へのポインタであるから、

5.10  p.143  下から11行目
訳書  ・・注意されたい。また [] は * および ++ より強いから、
正   ・・注意されたい(**++argv としてもよい)。また [] は * および
    ++ より結合が強いから、

5.11  p.144  下から3行目
訳書  ・・異なる基準でソートをやり直すことができる。
正   ・・異なる基準でソートするよう設定することができる。

5.11  p.146  l.2
訳書  これらは、現実の表現には一般に何の効果ももたらさないが、
正   これらは、実行プログラムには一般に何の効果ももたらさないが、

5.11  p.147  最下行
訳書  もちろん、-r は -n と同時にはたらかなねばならない。
正   -r は -n と同時に使えなければならない。

5.11  p.148  l.8
訳書  各フィールドは独立なオプションの集合により決まるものとする。
正   各フィールドは独立なオプションの集合に従ってソートされるものとす
    る。

5.12  p.148  l.13
訳書  この宣言は、宣言と実際の使用を一致させる目的で使われる。
正   この構文は、宣言と実際の使用を一致させるように作られている。

5.12  p.148  下から3行目
訳書  ・・一対のプログラムを示す。
正   ・・一対のプログラムを示す。ことばによる表現は左から右に読み進む。

5.12  p.150  l.9
訳書  /* *'s を数える */
正   /* '*' を数える */


    <第6章>


6.1   p.155  l.10
訳書   構造体の中の変数名はメンバーと呼ばれる。構造体のメンバー、タグ
    および一般の(メンバーでない)変数は、同じ名前であってもぶつかる
    ことはない。
正    構造体の中で命名された変数はメンバーと呼ばれる。構造体のメンバ
    ーとタグは、一般の(メンバーでない)変数と、同じ名前であってもぶ
    つかることはない。

6.1   p.156  l.6
訳書  ・・各メンバーに対する定数式の並びを・・
正   ・・各メンバーに対する定数式による初期値式の並びを・・

6.2   p.158  l.2
訳書  ・・関数の深さ・・
正   ・・関係の深さ・・

6.2   p.158  l.21
訳書  この構造体のパラメータは、他のどれとも同じように、値によって渡さ
    れるということを強調するために、明示的な一時変数を使う代わりに、
    p1 の要素を増やすのに使っている。
正   ここでは明示的な一時変数を使う代わりに、p1 の要素に加算している。
    構造体のパラメータは、他のどれとも同じように、値によって渡される
    ということを強調するためである。

6.2   p.158  l.25
訳書  ・・左側・・下側・・上側・・右側・・
正   ・・左辺・・下辺・・上辺・・右辺・・

6.2   p.158  下から2行目
訳書  ・・pt1 座標が pt2 座標より・・
正   ・・pt1 の各座標が pt2 の各座標より・・

6.2   p.160  l.3
訳書  と -> は左から右へと結合するから
正   . と -> は左から右へと結合するから

6.3   p.161  l.8
訳書  しかし配列が並行だということは、異なる構成も可能だということであ
    る。
正   しかし配列が並行だということは、異なる構成、つまり構造体の配列も
    可能だということである。

6.3   p.161  l.17
訳書  ・・型 key を宣言して、
正   ・・構造体型の key を宣言して、

6.3   p.161  下から2行目
    p.162  l.18, l.19, l.24, l.25
訳書  ・・初期値・・
正   ・・初期値式・・

6.3   p.162  l.25
訳書  通常のように、初期値であって [] が空のときには、配列 keytab 中の
    項目の数の計算が行われる。
正   初期値式が存在して [] が空のときには、いつものように、配列 key-
    tab 中のエントリの数が数えられる。

6.3   p.162  下から7行目
訳書  ・・昇順にソートしなければならない。
正   ・・昇順にソートされていなければならない。

6.3   p.164  l.9
訳書  ・・指定したオブジェクトのサイズに等しい整数、あるいはバイト数で
    表した型である。(厳密に言えば、sizeof は符号なし整数で、・・
正   ・・指定したオブジェクトまたは型のサイズをバイト数で表した整数を
    与える。(厳密に言えば、sizeof は符号なし整数値を生成する。・・

6.3   p.165  下から9行目
訳書  ・・るためのである。
正   ・・るためである。

6.3   p.165  下から9行目
訳書  ・・英字の区別は isalpha で行い、isalnum により英字と数字の区別を
    行っている。
正   ・・英字かどうかの判定は isalpha で行い、isalnum により英数字かど
    うかの判定を行っている。

6.4   p.165  下から3行目
訳書   ポインタと構造体の配列に・・
正    構造体へのポインタと構造体の配列に・・

6.4   p.166  最下行
訳書  構造体型 key へのポインタ・・
正   struct key へのポインタ・・

6.4   p.167  下から12行目
訳書  ・・後者は参照するのも正しくない。
正   ・・後者を逆参照するのも正しくない。

6.4   p.167  下から11行目
訳書  ・・配列の終りの先にある最初の要素・・
正   ・・配列の終りの一つ先の要素・・

6.4   p.167  下から5行目
訳書  ・・正しい日数で終りとなる。
正   ・・正しいタイミングで終りとなる。

6.4   p.167  下から3行目
訳書  ・・構造体には“穴”があるかもしれないからである。
正   ・・構造体には名前のない“穴”があるかもしれないからである。

6.4   p.168  l.5
訳書  ・・5バイトではなく8バイトを必要とするであろう。
正   ・・5バイトではなく8バイトを必要とするかもしれない。

6.5   p.168  下から11行目
訳書  ・・それを都合よく分類したり、二分探索を使ったりすることはできな
    い。
正   ・・それを都合よく分類しておいて、二分探索を使ったりすることはで
    きない。

6.5   p.168  下から5行目
訳書  ・・常時分類されているかのようにしておくことである。
正   ・・常時分類されているようにしておくことである。

6.5   p.169  l.7
訳書  ・・そのノードの単語より小さい単語のみがあり、
正   ・・そのノードの単語より辞書順で小さい単語のみがあり、

6.5   p.169  下から11行目
訳書  ・・探索は左の子の子供に対して続けられ、
正   ・・探索は左の子供に対して続けられ、

6.5   p.169  下から5行目
訳書  ・・それは明らかに次のような四つの成分をもった構造となる。
正   ・・それは次のような四つの成分をもった構造体として表現するのが好
    都合である。

6.5   p.171  l.10
訳書  ・・ヌル・ポインタと一致する。
正   ・・ヌル・ポインタと出会う。

6.5   p.171  l.14
訳書  /* addtree: p の位置あるいはその下に w でノードを加える */
正   /* addtree: p の位置あるいはその下に w のノードを加える */

6.5   p.171  下から7行目
訳書  これは木のノードを収容するための自由空間へのポインタを返すもので
    ある。こうして新しい単語は strdup によって見えない場所にコピーさ
    れる。
正   これは木のノードを収容するのにちょうどよい空きスペースへのポイン
    タを返すものである。そして新しい単語は strdup によって退避場所に
    コピーされる。

6.5   p.172  l.3
訳書  ・・上に示した木の印字を treeprint でシミュレートしてみるとよい。
正   ・・上に示した木の例で treeprint をシミュレートしてみるとよい。

6.5   p.172  下から5行目
訳書  そこで、われわれは標準ライブラリ関数 malloc を使用する。
正   そこで、われわれはこれを保証する標準ライブラリ関数 malloc を使用
    する。

6.5   p.172  最下行
訳書  ・・そのポインタを型変換で望ましい型に明示的に変えることであろう。
正   ・・そのポインタをキャストで望む型に明示的に変換することである。

6.6   p.174  l.16
訳書  ・・整数に変換され、次にポインタ配列への添字として使われる。
正   ・・整数に変換され、これがポインタ配列への添字として使われる。

6.6   p.175  l.4
訳書  ・・文字列中の文字の値を単に加算し、さらに配列のサイズで割り、そ
    の余りを配列のサイズのモジュロとして返す。これは最良のアルゴリズ
    ムではないが、
正   ・・文字列中の文字の値をかき混ぜながら加算し、さらに配列のサイズ
    で割り、その余りを返す。これは最良のハッシュ関数ではないが、

6.6   p.175  l.16
訳書   このハッシュ処理では、配列 hashtab 内の先頭の添字が計算される。
正    このハッシュ処理では、配列 hashtab 内の、リストの先頭へのインデ
    ックスが生成される。

6.6   p.176  l.20
訳書  /* 空いている前の defn */
正   /* 以前の defn を解放する */

6.7   p.177  l.13
訳書  名前であることを強調するために、
正   typedef によるものであることを強調するために、

6.7   p.178  l.4
訳書  ・・明示的に宣言されている変数と・・
正   ・・略さずに明示的に宣言されている変数と・・

6.8   p.179  l.3
訳書  ・・値が同一の記憶量を占有するもので、かつその型にかかわらず同一
    の場所に格納されるのであれば、
正   ・・値がその型にかかわらず同一の記憶量を占有し、かつ同一の場所に
    格納されるのであれば、

6.8   p.179  l.5
訳書  ・・単一を変数を・・
正   ・・単一の変数を・・

6.8   p.179  l.12
訳書   変数 u には、コンパイルを行なうマシンとは独立に、三つのタイプの
    うちの・・
正    変数 u には、三つのタイプのうちの・・

6.8   p.180  下から6行目
訳書  ・・演算子・・
正   ・・演算・・

6.9   p.181  l.2
訳書  ・・機械語・・
正   ・・マシンワード・・

6.9   p.182  l.9
訳書  fields:
正   (削除)

6.9   p.182  下から9行目
訳書  ・・他の構造体のメンバーを参照するとき、まったく同様に・・
正   ・・他の構造体のメンバーを参照するときと、まったく同様に・・

6.9   p.182  下から8行目
訳書  フィールドは小さい符号なし整数のように扱われ、
正   フィールドは小さい整数のように扱われ、


    <第7章>


7.2   p.187  l.14
訳書  その各々は次に連続している引数を変換し、出力させるためのものであ
    る。
正   その各々は次に続く引数を一つずつ変換し、出力させるためのものであ
    る。

7.2   p.187  l.16
訳書  % と変換文字の間には次のものがあってよい。
正   % と変換文字の間には次のものが(この順序で)あってよい。

7.2   p.188  l.18(表7-1)
訳書  ・・指数部が精度より -4 小さいか、あるいはより大きいか等しいとき
    には・・
正   ・・指数部が -4 より小さいか、あるいは精度より大きいか等しいとき
    には・・

7.2   p.189  l.8
訳書  ・・ printf ・・
正   ・・ sprintf ・・

7.4   p.192  l.12
訳書  改行も空白文字であるから、・・意味している。
正   改行も空白文字であるから、・・意味している(空白文字とは、ブラン
    ク、タブ、改行、復帰、垂直タブ、改ページである)。

7.5   p.194  最下行
訳書  これらの標準入出力は、ローカルなOSの下で走るプログラムのために
    自動的に定義されている。
正   これらの標準入出力は、ローカルなOSによってプログラムのために自
    動的に定義される。

7.5   p.195  l.4
訳書  これは一連の指定されたファイルと標準出力とをつなぐものである。
正   これは指定された一連のファイルを連結して標準出力に出力するもので
    ある。

7.5   p.195  下から9行目
訳書  というのは、<stdio.h> から得られる標準入出力定義の部分は FILE と
    呼ばれる構造体定義になっているからである。
正   というのは、<stdio.h> から得られる定義には FILE と呼ばれる構造体
    の宣言が含まれているからである。

7.5   p.196  下から4行目
訳書   一般にプログラムがスタートするときには、
正    一般にCプログラムがスタートするときには、

7.6   p.199  l.11
訳書  /* エラーを表すプログラム名 */
正   /* プログラム名。エラー表示で使う */

7.6   p.200  l.5
訳書  しかし exit は、他の関数から呼べること、およびそれへの呼出しが5
    章のプログラムのような、パターン探索プログラムで使われるという利
    点をもつ。
正   しかし exit は、他の関数からも呼べること、そしてこの呼出しは5章
    のプログラムのようなパターン探索プログラムで探すことができるとい
    う利点をもつ。

7.6   p.200  l.15
訳書   説明用の小さなプログラムでは exit の状態については一般に心配しな
    いが、
正    これまで説明用の小さなプログラムでは exit の状態については一般に
    心配しないできたが、

7.7   p.202  l.4
訳書   演習 7-6 二つのファイルを比べて、違っていたらその最初の行と文字
    位置を印字するプログラムを書け。
正    演習 7-6 二つのファイルを比べて、違っている最初の行を印字するプ
    ログラムを書け。

7.7   p.202  l.8
訳書  一致する行が見つかったときにファイルを印字すべきかどうか考えよ。
正   一致する行が見つかったときにファイル名を印字すべきかどうか考えよ。

7.8.1  p.202  l.17
訳書  ・・ stremp ・・
正   ・・ strcmp ・・

7.8.2  p.203  l.7
訳書  c がブランク・タブ・改行文字なら・・
正   c がブランク・タブ・改行・復帰・改ページ・垂直タブなら・・


    <第8章>


8.3   p.210  l.13
訳書   システムで仮定している標準入出力やエラー・ファイル以外のファイル
    ・・
正    システムで既定の標準入力・標準出力・標準エラー出力以外のファイル
    ・・

8.3   p.212  l.17
訳書  8.6 節で述べた・・
正   8.6 節で述べる・・

8.3   p.213  l.7
訳書  ・・ filename ・・
正   ・・ name ・・

8.5   p.217  l.9
訳書  ・・ "t+" ・・
正   ・・ "+" ・・

8.5   p.218  l.12
訳書  ・・書き直せ。
正   ・・書き直せ。コードサイズと実行速度を比較せよ。

8.6   p.219  l.10
訳書  ディレクトリとは、ファイル名のリストやそれの位置に関する情報を含
    んだファイルである。
正   ディレクトリとは、ファイル名やそれの位置に関する情報のリストを内
    容とするファイルである。

8.6   p.219  下から9行目
訳書  ・・演算・・
正   ・・演習・・

8.6   p.221  l.11
訳書  ・・ディレクトリではないかとわかると、
正   ・・ディレクトリではないとわかると、

8.6   p.223  下から5行目
訳書   型 ino_t は inode リストの中でインデックスを記述する・・
正    型 ino_t は inode リストへのインデックスを記述する・・

8.6   p.224  l.6
訳書  /* opendir: readdir 呼出しに対してディレクトリをオープンする */
正   /* opendir: readdir 呼び出しのためにディレクトリをオープンする */

8.6   p.225  l.18
訳書  こうしたプログラムでは、その情報の表現が“ヘッダ・ファイル”にの
    み現われ、プログラムに実際の宣言を埋め込むのではなく、プログラム
    でそれらのファイルを取り込むのがよい。第2は、注意すれば、それ自
    身比較的にシステム独立でありながらもなおかつシステムに依存するオ
    ブジェクトに対してインタフェースを創ることが可能だということであ
    る。
正   こうしたプログラムでは、その情報の表現が標準ヘッダーにだけ現れる
    ようにすることが肝心である。その宣言をプログラム自身に埋め込むの
    ではなく、それらのファイルを取り込むのである。第2は、システムに
    依存するオブジェクトに対して、それ自身は比較的システム独立なイン
    タフェースを作ることが、気を付ければできるということである。


    <付録A>


A1.   p.232  l.10
訳書  ・・構文字句や・・
正   ・・語句綴りや・・

A2.   p.232  下から5行目
訳書  A2. 構文規約
正   A2. 語句規約

A2.5.2 p.235  l.17, l.19
訳書  ・・望ましい文字の値・・
正   ・・望む文字の値・・

A2.5.2 p.235  下から5行目
訳書  ・・定義される整数型 wchar_t をもつ。
正   ・・定義される整数型 wchar_t の型をもつ。

A2.5.3 p.236  l.5
訳書  ・・省略可能な符号付き整数の指数および・・
正   ・・整数の指数(符号は省略可)および・・

A3.   p.237  l.5
訳書  もう一つ別のカテゴリがあるときは行を改める。いくつかの場合につい
    ては、one of ということばで印を付けて、狭い選択項目の長い集合を1
    行に示す。省略可能な終端または非終端の記号には "opt" を下に書き添
    える。
正   もう一つ別のカテゴリがあるときは通常は行を改めるが、いくつかの場
    合については、one of ということばで印を付けて、短い選択項目の長い
    集合を1行に示す。省略可能な末端または非末端の記号には "opt" を下
    に書き添える。

A4.   p.237  l.15
訳書  ・・構造体のタグ、共用体、列挙、
正   ・・構造体・共用体・列挙のタグ、

A4.1  p.238  l.8
訳書  ある関数プログラムを含むブロックも含めてブロックの中では、
正   ある関数を定義するブロックも含めてブロックの中では、

A4.2  p.238  l.17
訳書  付録Bの数値は許される最小の大きさを示すものである。
正   付録Bの数値は規格を満たすための最小の絶対値を示すものである。

A4.2  p.239  l.1
訳書  より長い整数は、短い整数と少なくとも同じメモリを必要とするが、処
    理系によっては、単なる整数か、あるいは長い整数のいずれかに等しい
    ことがある。
正   より長い整数は、より短い整数と少なくとも同じメモリを必要とするが、
    処理系によっては、単なる整数が、短い整数あるいは長い整数のいずれ
    かに等しいことがある。

A6.1  p.240  下から5行目
訳書  A6.1 整数への格上げ
正   A6.1 整数の格上げ

A6.2  p.241  l.1
訳書  A6.2 整数への変換
正   A6.2 整数の変換

A6.2  p.241  l.2
訳書   任意の整数は、その整数に適する最小の負でない値、すなわち符号な
    し型で表わしうる最大値よりモジュロ1だけ大きい値を見出すことによ
    って、与えられた符号なし型に変換される。
正    任意の整数は、その整数に合同な最小の負でない値、すなわち符号な
    し型で表しうる最大値より1だけ大きい値のモジュロを見出すことによ
    って、与えられた符号なし型に変換される。

A6.3  p.241  l.11
訳書  とくに負の浮動小数値の符号なし整数値への変換の結果は明確には決め
    られていない。
正   とくに負の浮動小数値の符号なし整数値への変換の結果は規定されてい
    ない。

A6.5  p.242  l.1
訳書  ・・る。
     そうでないときは、両方の被演算数に対して整数への格上げが行なわ
    れる。そして片方の被演算数が unsigned long int なら、他方も un-
    signed int に変換される。
正   ・・る。
     そうでなくて、片方の被演算数が float のときには、他方も float
    に変換される。
     そうでないときは、両方の被演算数に対して整数の格上げが行なわれ
    る。そして片方の被演算数が unsigned long int なら、他方も un-
    signed long int に変換される。

A6.5  p.242  l.17
訳書  第1版では、結果は常に符号なしであった。
正   第1版では、常に符号なし優先であった。

A6.6  p.242  下から6行目
訳書  ・・すなわち配列の中の二つのポインタは減算してもよい。
正   ・・すなわち一つの配列の中への二つのポインタは減算してもよい。

A6.6  p.243  l.10
訳書  その結果できるポインタは、対象となるポインタが・・
正   その結果できるポインタは、それが・・

A6.8  p.244  l.11
訳書  ・・あるいはそうしたポインタから割り当てることが可能であり、
正   ・・あるいはそうしたポインタから代入することが可能であり、

A6.8  p.244  l.16
訳書  ・・とくに定めている。
正   ・・とくに保証している。

A7.2  p.246  l.5
訳書   カッコ内で囲まれた式はその型および値が修飾子なしのものと同一な
    一次式である。
正    カッコで囲まれた式はその型および値がカッコなしのものと同一な一
    次式である。

A7.3.2 p.248  l.4
訳書   呼出しの通用範囲における関数宣言が新しいスタイルであれば、
正    呼出しの通用範囲に存在する関数宣言が新しいスタイルであれば、

A7.3.2 p.248  l.7
訳書  この場合、引数の数は・・
正   省略形の場合、引数の数は・・

A7.3.2 p.248  l.9
訳書  ・・前のパラグラフで述べた標準的な引数格上げを受ける。
正   ・・前のパラグラフで述べた省略時の引数格上げを受ける。

A7.3.3 p.248  下から11行目, 下から5行目
訳書  ・・後の識別子は構造体あるいは共用体のメンバーを指すものでなけれ
    ばならない。
正   ・・後の識別子は構造体あるいは共用体のメンバーの名前でなければな
    らない。

A7.4.2 p.250  l.2
訳書  この被演算数は、ビット・フィールドであったり、register として宣言
    されたオブジェクトを参照する左辺値であったりしてはならず、関数型
    であってもいけない。
正   この被演算数は、左辺値または関数型であり、左辺値の場合は、ビット・
    フィールドであったり、register として宣言されたオブジェクトを参照
    するものであったりしてはいけない。

A7.4.3 p.250  l.9
訳書  その被演算数が演算のオブジェクト、構造体、共用体、あるいはポイン
    タ型であれば、これは左辺値である。
正   その被演算数が算術型、構造体型、共用体型、あるいはポインタ型のオ
    ブジェクトであれば、これは左辺値である。

A7.4.8 p.251  l.11
訳書  被演算数は、評価の行われない式か、カッコで囲まれた型名のいずれか
    である。
正   被演算数は、式か、カッコで囲まれた型名のいずれかである。式の評価
    は行われない。

A7.4.8 p.251  l.15
訳書  ・・当のオブジェクトが配列にタイルを貼るのに必要なパディングも含
    まれる。
正   ・・当のオブジェクトが配列を作る場合に必要なパディングも含まれる。

A7.4.8 p.251  l.18
訳書  特定の型は処理系による。
正   どの整数型であるかは処理系による。

A7.7  p.252  下から2行目
訳書  ・・高い端の先の最初の場所を除いて、結果は不定となる。
正   ・・終端の一つ先の場所を除いて、結果は不定となる。

A7.7  p.253  l.1
訳書   配列の端の先へのポインタについての配慮は新しいものである。
正    配列の端の一つ先へのポインタについての配慮は新しいものである。

A7.16  p.257  l.4
訳書   ポインタに対する型変換では、
正    ポインタの型の比較では、

A7.17  p.257  l.8
訳書   代入演算子には、次のようないくつかあるが、すべて左から右へ適用
    される。
正    代入演算子には、次のようにいくつかあるが、すべて右から左へ適用
    される。

A7.17  p.257  l.14
訳書  この左辺値は変更可能でなければならない。しかしこれは配列であって
    はならず、また不完全な型をもったり、関数であったりしてはいけない。
    さらに、その型を const で修飾するのは禁止されている。またそれが構
    造体あるいは共用体であるときには、const をもつメンバー、あるいは
    再帰的にサブメンバーをもってはならない。
正   この左辺値は変更可能でなければならない;すなわち、これは配列であ
    ってはならず、また不完全な型をもったり、関数であったりしてはいけ
    ない。さらに、その型は const で修飾されていてはならない;それが構
    造体あるいは共用体であるときには、メンバーあるいは再帰的にサブメ
    ンバーが const で修飾されていてはならない。

A7.17  p.257  下から6行目
訳書  ・・他方が void へのポインタである。左被演算数がポインタで、右被
    演算数が値 0 をもつ定数である;あるいは両被演算数が関数、あるいは
    右被演算数に const あるいは volatile がないこともある点を除けば、
    その型が同じであるオブジェクトへのポインタである。
正   ・・他方が void へのポインタである;左被演算数がポインタで、右被
    演算数が値 0 をもつ定数である;あるいは両被演算数が関数あるいはオ
    ブジェクトへのポインタで、このオブジェクトは右被演算数に const あ
    るいは volatile がないこともある点を除けば、その型が同じである。

A7.19  p.258  下から9行目
    p.259  l.5
訳書  ・・初期値・・
正   ・・初期値式・・

A7.19  p.258  下から4行目
訳書  ・・型変換では整数型を指し、任意の浮動小数は整数に型変換しなけれ
    ばならない。これで配列、間接アドレス指定、アドレス計算、構造体の
    メンバー操作は当然排除される。
正   ・・型変換では整数型を指定し、任意の浮動小数は整数に型変換しなけ
    ればならない。これで配列、間接参照、アドレス演算、構造体のメンバ
    ー操作は当然排除される。

A8.   p.259  l.12
訳書  ・・メモリが確保されるわけではない。宣言の形式は
正   ・・メモリが確保されるわけではない。メモリを確保する宣言は定義と
    呼ばれる。宣言の形式は

A8.1  p.260  下から2行目
訳書  関数の外側で宣言されたオブジェクトと関数は外部リンケージをもつ
    static として扱われる。
正   関数の外側で宣言されたオブジェクトと関数は、外部リンケージをもつ
    静的なものとして扱われる。

A8.3  p.263  下から13行目
訳書  不完全な構造体型あるいは共用体型をもつオブジェクトは、例えば宣言
    (定義ではなく)のようにそのサイズが必要ない文脈で、ポインタを指
    定したり、typedef を創ったりするのには使ってもよいが、
正   不完全な構造体型あるいは共用体型をもつオブジェクトは、そのサイズ
    が必要ない文脈で、例えば宣言(定義ではなく)したり、ポインタを指
    定したり、typedef を創ったりするのには使ってもよいが、

A8.3  p.263  下から5行目
訳書  ・・タグは自己参照構造体を許す機能をもつ。
正   ・・タグは自己参照構造体を許す機能をもつ。つまり、構造体あるいは
    共用体は自分自身のインスタンスへのポインタを含むことができる。不
    完全型へのポインタを宣言することはできるからである。

A8.3  p.265  l.17
訳書  これらは 20 文字の配列、同じ構造体への二つのポインタを含む。
正   これらは 20 文字の配列、一つの整数、同型の構造体への二つのポイン
    タを含む。

A8.3  p.265  下から4行目
訳書  は構造体 s の左の部分のポインタの参照になる。
正   は構造体 s の左の部分木へのポインタを参照する。

A8.3  p.265  最下行
訳書  一般に共用体のメンバーは、共用体の値が同じメンバーを使って割り当
    てられない限り、吟味できない。
正   一般に共用体のメンバーは、共用体の値が同じメンバーを使って代入さ
    れているのでない限り、吟味できない。

A8.3  p.266  l.2
訳書  ある共用体に、共通の初期化列を共有するいくつかの構造体が含まれて
    いて、しかも共用体にいまそれらの構造体の一つが含まれているときに
    は、含まれている構造体のどれかの共通初期化部分を参照することが許
    される。
正   ある共用体に、先頭のメンバー列を共有するいくつかの構造体が含まれ
    ていて、しかも共用体がいまそれらの構造体の一つを保持しているとき
    には、含まれている任意の構造体の共通先頭部分を参照することが許さ
    れる。

A8.4  p.266  下から12行目
訳書  ・・名前付きの定数の集合にまたがった値をもつ・・
正   ・・名前付きの定数の集合の範囲の値をもつ・・

A8.4  p.267  l.11
訳書  列挙子リストのない enum-specifier のタグは、リスト付きの通用範囲
    内指定子を参照するものでなければならない。
正   列挙子リストのない enum-specifier のタグは、通用範囲内にあるリス
    ト付きの指定子を参照するものでなければならない。

A8.6  p.268  l.6
訳書  宣言子は、その識別子が宣言子として同じ形の式の中に現れると、
正   宣言子は、その識別子が宣言子と同じ形の式の中に現れると、

A8.6  p.268  l.11
訳書  ・・この記法を使って演えき的に記述される。
正   ・・この記法を使って誘導的に記述される。

A8.6.1 p.268  下から3行目
訳書  ・・ある。
正   ・・ある。* に続く修飾子はポインタそのものに適用されるものであり、
    ポインタの指すオブジェクトにかかるわけではない。

A8.6.1 p.269  l.3
訳書  ・・であろう。
正   ・・であろう。結局、実際の宣言では ap は“int へのポインタの配列”
    型となる。

A8.6.2 p.269  l.12
訳書  A8.6.2 配列の宣言
正   A8.6.2 配列宣言子

A8.6.2 p.269  l.15
A8.6.3 p.270  下から10行目
    p.271  l.18
訳書  ・・ type-modifier T ・・
正   ・・ “type-modifier T” ・・

A8.6.2 p.270  l.2
訳書  より詳しく言えば、x3d は項目の配列である。
正   より詳しく言えば、x3d は3項目の配列である。

A8.6.2 p.270  l.13
訳書  A7.7 節によりこの掛算には整数のサイズによる掛算が含まれる。これは、
    配列が行ごとに格納され・・添字の計算には関係しないという規則から
    きている。
正   A7.7 節によりこの加算には整数のサイズによる掛算が含まれる。この規
    則からわかるのは、配列が行ごとに格納され・・添字の計算には関係し
    ないということである。

A8.6.3 p.270  下から13行目
訳書  A8.6.3 関数の宣言
正   A8.6.3 関数宣言子

A8.6.3 p.271  l.6
訳書  ・・void のみからなるパラメータ型リストのみからなる。
正   ・・void のみからなるパラメータ型リストを持つ。

A8.6.3 p.271  l.12,  l.14
訳書  ・・関数定義の前に・・
正   ・・関数定義の頭部で・・

A8.6.3 p.271  l.14
訳書  ・・その識別子は直ちに範囲外となる。
正   ・・その識別子は関数宣言終了とともに有効範囲を終わる。

A8.6.3 p.271  l.19
訳書  ・・“T を返す未指定の引数 type-modifier 関数”・・
正   ・・“T を返す引数不明の type-modifier 関数”・・

A8.7  p.272  下から8行目
訳書  これは形をきれいにするための微妙な工夫といえる。
正   これは形を整えるためのうまい方法である。

A8.7  p.274  l.6
訳書  ・・初期化されない静的な構造体の・・
正   ・・初期化されない静的な共用体の・・

A8.7  p.274  l.12,  l.19,  下から5行目
訳書  ・・初期値・・
正   ・・初期値式・・

A8.8  p.275  l.13
訳書  データ型の名前を与えることが望ましい文脈・・
正    データ型の名前を与えることが必要な文脈・・

A8.8  p.276  l.9
訳書  ・・それぞれが整数へのポインタを返す・・
正   ・・それぞれが整数を返す・・

A8.9  p.276  最下行
訳書   typedef はまったく新しい型を導くものではなく、他の方法で指定で
    きる型と単に同義語であるにすぎない。
正    typedef はまったく新しい型を導くものではなく、他の方法で指定で
    きる型の同義語を生成するにすぎない。

A8.10  p.277  l.10
訳書   二つの型指定子リストは、ある種の指定子が他で暗に宣言されている・・
正    二つの型指定子リストは、ある種の指定子が他の指定子によって暗に
    宣言されている・・

A8.10  p.277  l.12
訳書  異なるタグをもつ構造体、共用体、列挙は異なるが、
正   異なるタグをもつ構造体、共用体、列挙は異なり、

A8.10  p.277  l.15
訳書  ・・抽象的な宣言子・・
正   ・・抽象宣言子・・

A8.10  p.277  l.16
訳書  一方、配列のサイズおよび関数パラメータ型が重要なのはいうまでもな
    い。
正   配列のサイズおよび関数パラメータ型も一致する必要がある。

A9.3  p.279  l.2
訳書  ・・その後で効力をもつ。
正   ・・その後で効力を取り戻す。

A9.3  p.279  l.6
訳書  そのブロックへの分岐が実行されたときには、
正   そのブロックの途中に飛び込んだときには、

A9.4  p.279  下から14行目
訳書  この else のあいまいさを避けるには、同じブロックの入れ子レベルで
    else と最後に出てきた else のない if とをつなげばよい。
正   この else のあいまいさは、同じブロックの入れ子レベルで一つの
    else と最後に出てきた else のない if とを対応させることで解かれる。

A9.5  p.280  l.13
訳書  ・・テストは文の各実行の前に行われる。
正   ・・テストは文の各回の実行の前に行われる。

A9.6  p.281  下から14行目
訳書  制御が移るのは終端の文の後の文である。
正   制御が移るのは終了した文に続く文である。

A9.6  p.281  下から12行目
訳書  この式は、代入のときと同じように、それが出てくる関数によって返さ
    れる値に変換される。
     関数の端から落ちるのは、式のない return の実行と同一である。
正   この式は、代入のときと同じように、その関数によって返される型に変
    換される。
     関数の最後に到着して終了するのは、式のない return の実行と同一
    である。どちらの場合も、返される値は不定である。

A10.  p.282  l.1
訳書   外部定義の通用範囲は、
正    外部宣言の通用範囲は、

A10.1  p.282  下から11行目
訳書  とくに、typedef によって関数型を指定しようとしてはならない。
正   とくに、typedef を通して関数型を定義しようとしてはならない。

A10.1  p.283  l.3
訳書  この宣言リストは、リストで名前のあげられたパラメータを宣言するも
    ので、
正   この宣言リストは、リストで名前のあげられたパラメータだけを宣言し
    なければならない。

A10.2  p.284  l.3
訳書   外部宣言はオブジェクト、関数、およびその識別子の性質を指定する
    ものである。
正    外部宣言はオブジェクト、関数、およびその他の識別子の性質を指定
    するものである。

A10.2  p.284  l.4,  下から9行目
訳書  ・・外部の・・
正   ・・外部的な・・

A10.2  p.284  下から9行目,  下から8行目
訳書  ・・仮の宣言・・
正   ・・仮の定義・・

A10.2  p.285  l.5
訳書  プログラムのどこかで宣言が行われると、仮の定義は単に宣言となるが、
    定義が出てこないと、仮の定義はすべて、初期値 0 の定義となる。
正   プログラムのどこかで定義が行われると、仮の定義は単に宣言となるが、
    定義が出てこないと、仮の定義はすべて、初期値式が 0 の単一の定義に
    まとめられる。

A11.  p.285  l.13
A11.1  p.285  l.18
    p.286  l.2
訳書  ・・構文範囲・・
正   ・・語句範囲・・

A11.1  p.285  下から8行目
訳書  ・・各構造体あるいは共用体の個々のメンバーである。
正   ・・各構造体あるいは共用体ごとのメンバーである。

A11.1  p.285  下から3行目
訳書  第1版からの最も大きな逸脱は、
正   第1版との最も大きな違いは、

A11.1  p.286  l.2
訳書   外部で宣言された・・
正    外部的に宣言された・・

A11.1  p.286  l.5
訳書  関数定義の・・
正   関数宣言の・・

A11.1  p.286  l.12
訳書  ・・ブロックの外側での識別子の宣言は、
正   ・・ブロックの外側でのその識別子の宣言は、

A12.  p.287  l.6
訳書  ・・あるいは #include 指令(A12.4 節)と同様なファイル名を与える
    文字列である;
正   ・・あるいは #include 指令(A12.4 節)におけるファイル名を与える
    文字列である;

A12.  p.287  l.11
訳書  ただしこのやり方は、処理系によっては非難の的になるかもしれない。
正   ただしこれらのフェーズは、処理系によっては圧縮されているかもしれ
    ない。

A12.  p.287  下から9行目
訳書   5.その結果を翻訳し、次いで必要なプログラムを集め、外部関数と
    オブジェクトの参照をその定義と連結させることによって、他のプログ
    ラムやライブラリとともにリンクさせる。
正    5.この結果が翻訳され、次いで必要なプログラムとデータを集め、
    外部的な関数とオブジェクトの参照をその定義と連結させることによっ
    て、他のプログラムやライブラリとともにリンクされることになる。

A12.3  p.288  l.12
訳書  ・・トークンとして与えられた文字列・・
正   ・・与えられたトークン列・・

A12.3  p.288  l.13,  l.14,  l.20,  l.21
    p.289  l.3,  l.8,  l.13,  l.18,  l.22,  l.24
    p.290  下から6行目
A12.4  p.291  下から7行目
A12.7  p.293  最下行
訳書  ・・トークン文字列・・
正   ・・トークン列・・

A12.3  p.288  l.14
訳書  同じ識別子に対する第2の #define は、第2のトークン文字列が(前後
    の空白文字は別として)最初のものと同一でない限りはエラーとなる。
正   同じ識別子に対する第2の #define は、第2のトークン列が最初のもの
    と同一でない限りはエラーとなる。ただし、トークンを分離する空白は
    すべて等価として扱われる。

A12.3  p.289  l.1
訳書   マクロが第2の形式で定義された後で、マクロ識別子の後に、省略可
    能な空白文字、(、コンマで区切られた一連のトークン、それに ) を付
    けたテキストを置くと、それがこのマクロの呼出しとなる。
正    マクロが第2の形式で定義された場合は、それ以後、そのマクロ識別
    子に、省略可能な空白文字、(、コンマで区切られた一連のトークン、そ
    れに ) が続くテキストが現れると、それがこのマクロの呼出しとなる。

A12.3  p.289  l.5
訳書  ・・また入力の際には・・
正   ・・また読込みの際には・・

A12.3  p.289  l.7
訳書  さらに各引数から出てくるトークン文字列については、マクロの置換ト
    ークン文字列に対応するパラメータの識別子が引用符なしで現れるごと
    に、それとの置換が行われる。置換文字列のパラメータの前に # が付い
    ている、あるいは ## が前あるいは後に付いているのでない限り、挿入
    の直前には、マクロ呼出しに対して引数トークンが吟味され、必要に応
    じて展開される。
正   さらにマクロの置換トークン列の中に、引数に対応するパラメータの識
    別子が引用符なしで現れるごとに、これが各引数から得られるトークン
    列によって置き換えられる。置換トークン列のパラメータの前に # が付
    いている、あるいは ## が前あるいは後に付いているのでない限り、挿
    入の直前には、引数トークンについてマクロ呼出しが吟味され、必要に
    応じて展開される。

A12.3  p.289  l.13
訳書  最初に、置換トークン文字列のパラメータの直前に # が付いていれば、
    対応するパラメータの周りには文字列引用符(")が置かれ、# およびパ
    ラメータ識別子が引用符付き引数と置き換えられる。
正   第一に、置換トークン列のパラメータの直前に # が付いていれば、対応
    する引数は文字列引用符(")で囲まれ、# およびパラメータ識別子が引
    用符付き引数と置き換えられる。

A12.3  p.289  l.16
訳書  ・・あるいはその中にあるように見える " あるいは \ という文字・・
正   ・・あるいはその中にある " または \ という文字・・

A12.3  p.289  下から6行目
訳書  ・・ひとたび置換されると、それが再スキャンのときに再び現れても、
正   ・・ひとたび置換されると、この同じ識別子が再スキャンのときに再び
    現れても、

A12.3  p.289  最下行
訳書  最も重要な変換は、
正   最も重要な変更は、

A12.3  p.290  l.3
訳書  ・・“明白な定数”・・
正   ・・“意味のわかる定数”・・

A12.3  p.290  l.9
訳書  ・・ポイント・・
正   ・・ポインタ・・

A12.3  p.290  l.10
訳書  また副作用をもちうる引数は、
正   また引数は副作用をもちうるが、ここでは

A12.4  p.291  l.10,  l.16
訳書  ・・ \* ・・
正   ・・ /* ・・

A12.4  p.291  l.10
訳書  ・・その効果は無効となる。
正   ・・その効果は未定義である。

A12.4  p.291  l.14
訳書  ・・(わざと処理系依存なフェーズ)・・
正   ・・(わざと処理系依存な言い方をしている)・・

A12.5  p.292  l.18
訳書  次々の指令行に続くテキストの扱いは普通通りである。
正   条件の成立した指令行に続くテキストは通常の通りに扱われる。

A12.5  p.292  l.23
訳書  ・・#else に続くテキストは通常の通り扱われる。
正   ・・#else に続くテキストが通常の通り扱われる。

A12.10 p.294  下から10行目
訳書   __LINE__ 現在の行番号を含む10進定数
正    __LINE__ 現在の行番号を表す10進定数

A12.10 p.294  下から6行目
訳書   __STDC__ 定義 1,
正    __STDC__ 定数 1。

A13.  p.295  l.2,  l.10
訳書  ・・終端記号・・
正   ・・末端記号・・

A13.  p.295  l.5
訳書  この文法は自動字句解析(パーサ)ジェネレータに入力できる形に変換
    可能である。その際、生成規則における選択を表わすのに使われる構文
    マーキングを付加するほかに、one of の構成を展開し、(字句解析ジェ
    ネレータの規則に従って)各生成規則を opt 記号により、一つは記号付
    き、一つは記号なしでダブって使う必要がある。
正   この文法は自動字句解析(パーサ)ジェネレータに入力できる形に機械
    的に変換可能である。その際、生成規則における選択肢を表すのに使わ
    れる構文マーキングを付加するほかに、one of の構成を展開し、(字句
    解析ジェネレータの規則に従って)各生成規則を opt 付き記号について、
    一つはその記号付き、もう一つはそれなしでダブって作り出す必要があ
    る。

A13.  p.295  l.11
訳書  唯一ぶつかりがあるのは、if-else のあいまいさである。
正   唯一衝突が生ずるのは、if-else のあいまいさである。


    <付録B>


    p.301  下から6行目
訳書  ヘッダーを取り込むのは・・それで宣言するものすべての前でなければ
    ならない。
正   ヘッダーを取り込むのは・・それで宣言するものをどれもまだ使わない
    うちでなければならない。

B1.1  p.302  下から8行目
訳書  型 size_t は sizeof 演算子で生成される符号なし整数を指す。
正   型 size_t は sizeof 演算子で生成される符号なし整数の型である。

B1.1  p.303  l.6 (fopen)
訳書  ・・ fflush すなわちファイル位置付け関数・・
正   ・・ fflush またはファイル位置付け関数・・

B1.1  p.303
fclose() と remove() の見出しが逆

B1.2  p.305  l.14 (fprintf)
訳書   +, 数を正常に符号付きで印字すべきことを指定
正    +, 数を常に符号付きで印字すべきことを指定

B1.2  p.305  下から3行目 (fprintf)
訳書  数すなわち精度、文字列から印字すべき最大の文字数、すなわち e, E,
    f に対しては・・
正   精度を指定する数。文字列から印字すべき最大の文字数、あるいは e,
    E, f に対しては・・

B1.2  p.306  l.6 (fprintf)
訳書  ・・引数(s)・・
正   ・・一つあるいは二つの引数・・

B1.2  p.306  l.11(表 B-1)
訳書  変換後の引数の型
正   引数の型;変換後の出力

B1.3  p.308  下から8行目(表 B-2)
訳書  角カッコの間の集合における入力文字の空でない最長の文字列とマッチ
    する
正   角カッコの間の文字のセットにある入力文字からなる空でない最長の文
    字列

B1.3  p.308  下から5行目(表 B-2)
訳書  角カッコの間にある文字のセットにない入力文字がなる空でない最長の
    文字列
正   角カッコの間にある文字のセットにない入力文字からなる空でない最長
    の文字列

B1.3  p.308  下から2行目(表 B-2)
訳書  リテラルな %
正   % そのもの

B1.6  p.312  l.2 (fsetpos)
訳書  ・・使われる。
正   ・・使われる。fsetpos はエラー時にゼロでない値を返す。

B3.   p.314  l.7 (strcmp)
訳書  cs>ct なら <0 を、cs==ct なら 0 を、cs<ct なら >0 を返す。
正   cs<ct なら <0 を、cs==ct なら 0 を、cs>ct なら >0 を返す。

B3.   p.314  l.26 (strtok)
訳書  s の中で探される。
正   s の中で探される。以下を見よ。

B3.   p.314  l.29 (strtok)
訳書  ・・最初のトークンである。
正   ・・最初のトークンである。この呼出しは s の次の文字に '\0' を上書
    きしてトークンの終端とし、このトークンへのポインタを返す。

B3.   p.314  下から5行目
訳書  また n 型は size_t であり、
正   また n は型 size_t のものであり、

B4.   p.315  l.7
訳書  ・・数学関数に対して領域および範囲に関するエラーを知らせる・・
正   ・・数学関数における領域および範囲に関するエラーを知らせる・・

B4.   p.316  l.2 (frexp)
訳書  x を間隔 [1/2,1) に正規化された少数部(これが返される)と・・
正   x を [1/2,1) の範囲に正規化された少数部(これが返される)と・・

B5.   p.318  l.17 (exit)
訳書  登録とは逆の順序で atexit 関数が呼ばれ、
正   atexit で登録された関数が逆の順序で呼ばれ、

B7.   p.320  下から6行目
訳書  ・・可変数の引数を持つ関数 f の最後に指定されたパラメータ・・
正   ・・可変数の引数を持つ関数 f の最後の名前付きパラメータ・・

B7.   p.320  下から2行目
訳書  この ap は、名指していない引数をアクセスする前に、
正   この ap は、名前のない引数をアクセスする前に、

B7.   p.321  l.2
訳書  ・・次の未指定の引数の型と値を持つデータが生成され、
正   ・・次の名無し引数の型と値を持つデータが生成され、

B8.   p.321  l.15 (setjmp)
訳書  ・・ longjmp で続けて呼ばれたときは非零である。
正   ・・後続の longjmp が呼ばれたときは非零である。

B9.   p.322  l.18 (signal)
訳書  ・・特定のシグナルに対しては handler の前の値、
正   ・・指定されたシグナルに対する handler の以前の値、

B9.   p.322  l.21 (signal)
訳書  すなわち、シグナル処理関数の呼出しは (*handler)(sig) によるのと同
    様である。
正   次いで、シグナル処理関数が (*handler)(sig) によるのと同様に呼び出
    される。

B10.  p.323  l.1
訳書  B10. 日付けの時刻の関数:<time.h>
正   B10. 日付けと時刻の関数:<time.h>

B10.  p.323  l.20 (clock)
訳書  clock()/CLK_TCK は秒で表された時間である。
正   clock()/CLOCKS_PER_SEC は秒で表された時間である。

B10.  p.325  l.14 (strftime)
訳書  %S 秒(00-59)
正   %S 秒(00-61)

B11.  p.325  下から10行目、9行目
訳書  +21474836477,  -21474836477
正   +2147483647,  -2147483647

B11.  p.325  最下の4行
訳書  2555,  655355,   429496729575,  655355
正   255,  65535,   4294967295,   65535


    <付録C>


    p.327  l.4
訳書  ・・元の記述のあいまいさを修復するものや、
正   ・・元の記述のあいまいさを手直しするものや、

    p.327  l.9
訳書  ・・市販のいくつかのコンパイラで部分的に予期されていたものである。
正   ・・市販のいくつかのコンパイラで部分的に先取りされていたものであ
    る。

    p.327  l.13
訳書  ・・第1版では環境やライブラリについて述べる試みをしていないから、
正   ・・第1版では環境やライブラリを規定しようとしていなかったから、

    p.328  l.16
訳書  降接する文字列リテラルは連結される。
正   隣接する文字列リテラルは連結される。

    p.328  l.17
訳書  幅広文字列リテラルおよび文字列定数に関する記法が設けられた。
正   幅広文字の文字列リテラルおよび文字定数に関する記法が設けられた。

    p.330  l.7
訳書  パラメータの通用範囲は関数の複合文の中に注入 (inject) される。し
    たがって、関数のトップレベルでの可変な宣言では、パラメータを隠す
    ことができなくなる。
正   パラメータの通用範囲は関数の複文の中に置かれる。したがって、関数
    のトップレベルでの変数宣言では、パラメータを隠すことができない。