K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[2077] 【C言語ポインタ完全制覇】3-1-2 Cの宣言を解読する
返信


投稿者:knwifuru
2017/12/21 10:26:47

Link:
バカな質問ばかりして恐縮です。

第1版のp144に『⊆永婿劼剖瓩なから、優先順位に従って派生型(ポインタ、配列、関数)を解釈する。』とあります。

これでいくと、Table 3-1の3番目、
  int hoge[10][3];
は、
 「識別子"hoge"に一番近いのは、配列[10]。その次が配列[3]。最後に、int」
なので、
 「要素数10個の配列が、3つ並んで(また配列を作って)いる。(基本型はint)」
となると思えるのですが、“日本語的表現”では
 hoge は、intの配列(要素数3) の配列(要素数10)
と、「要素数3の配列が10個並んでいる」という意味とされています。(Fig. 3-15でも同様)

結局、Cの宣言は、日本語的に考えるとダメで(識別子から遠い側の配列宣言[3]を先に解釈しないと正しくない)、英語で表現して考えないとダメだ、ということなんでしょうかね…
(質問というか、ぼやき?)

"'hoge' is an array (with 10 elements) of an array (with 3 elements) of int."

# あ、本の中の英語の文章ですが、可算名詞に冠詞が抜けているものが少なからずありました…
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2079] Re:【C言語ポインタ完全制覇】3-1-2 Cの宣言を解読する
返信


投稿者:(ぱ)こと管理人
2017/12/22 01:20:10

Link:
>結局、Cの宣言は、日本語的に考えるとダメで(識別子から遠い側の配列宣言[3]を先に解釈
>しないと正しくない)、英語で表現して考えないとダメだ、ということなんでしょうかね…

そうです。
まあ、Cの宣言は英語圏でも「酷評を受ける」そうですが、
日本人にとってはさらにひとつハードルが増えますね。

># あ、本の中の英語の文章ですが、可算名詞に冠詞が抜けているものが少なからず
>ありました…

これはK&Rのdclもそうなっているからいいだろう、ということで付けていません。
第2版では、p.163に注の形で言い訳を入れました。
(韓国語版では、訳者の方が足してくれたりしたようですが)
# この注で、「declでも付けていませんし」とあるのはdclの間違いですね…
# 後ほど正誤表に挙げます。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2080] Re:【C言語ポインタ完全制覇】3-1-2 Cの宣言を解読する
返信


投稿者:knwifuru
2017/12/22 09:15:25

Link:
>># あ、本の中の英語の文章ですが、可算名詞に冠詞が抜けているものが少なからず
>>ありました…
>
>これはK&Rのdclもそうなっているからいいだろう、ということで付けていません。
>第2版では、p.163に注の形で言い訳を入れました。
>(韓国語版では、訳者の方が足してくれたりしたようですが)
># この注で、「declでも付けていませんし」とあるのはdclの間違いですね…
># 後ほど正誤表に挙げます。

あ、本当だ!
この件に関しては、第2版を確認せずに投稿しちゃってました… (^^;

確かに、K&$第二版日本語版のp149の、dcl『の実行結果』も、冠詞が抜けています。
原著第二版(1988)のp122ページの『実行出力』でも、ありませんね。

また、"Pointers on C" (Kenneth A. Reek, Addison Wesley(1988))のp355で
紹介されている、cdeclというプログラム
https://cdecl.org/
https://github.com/ridiculousfish/cdecl-blocks
『の出力』でも、冠詞は省略しているみたいですね。

   $ cdecl
   Type `help' or `?' for help
   cdecl> explain int(*f)(void);
   declare f as pointer to function (void) returning int

しかし、これは、あくまでプログラム出力を簡潔にするためだと思います。

実際、"C - A Reference Manual (5ed.)"(Harbison & Steel, Prentice Hall (2002))の
4 Declarationsという章の最初のページ(p73)にも

  Declarations in C are difficult to describe for several reasons. First, they
  involve some unusual syntax that may be confusing to the novice.  For example,
  the declaration
     int (*f) (volid);
  declares a pointer to a function taking no arguments and returning an integer.

と、文章ではきちんと冠詞をつけていることからも、英語としては冠詞が必要である
ことが明らかですし、K&R原著第二版で配列が最初に説明される 1.6 Arrays (p22)で
でだって、本文文章では

  The declaration
     int ndigit[10];
  declares ndigit to be an array of 10 integers.

と書かれています。

というわけで、プログラム出力は兎も角として、解説の文章では(第2版でも仰っている
ように)必要な冠詞を抜かさず英語としてまともな文章になさるほうが良いと、僕は
思います。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[2081] Re:【C言語ポインタ完全制覇】3-1-2 Cの宣言を解読する
返信


投稿者:(ぱ)こと管理人
2017/12/23 23:26:00

Link:
>というわけで、プログラム出力は兎も角として、解説の文章では(第2版でも仰っている
>ように)必要な冠詞を抜かさず英語としてまともな文章になさるほうが良いと、僕は
>思います。

本来の英語としてはそうだろうと思います(intの前とかは微妙な気もしますが)。
本書内のは、まあ、説明用の英語もどきということでご理解ください。
[ この投稿を含むスレッドを表示] [ この投稿を削除]