とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

『三田典玄の「体育館の裏話」 - 関数の話(5)』につっこむ

C言語では、「数」には必ず「型」がある。

「数」を「オブジェクト」と無条件で置き換えましょう。

また、「ポインタ変数」という、学習には非常に厄介なものがある。

『何だよ? 「ポインタ変数」って。』といつでも思うことが大切です。ポインタ変数とは多くの場合ポインタの説明をぼかすときに出てくる用語です。K&Rの二人だろうがそれ以外の人であろうが,Webだろうが本であろうが,この用語が出てきたら全身の毛を逆立てて警戒するようにしましょう。「ポインタ変数」は俗語ですので,定義がまちまちです。で,ポインタが分かってない説明者は,何となく「ポインタ変数」を使いますのでだまされないようにしましょう。一般的な「ポインタ変数」の説明は前橋さんが上手です。

前橋 和弥
技術評論社 (2001/01)
売り上げランキング: 16473
おすすめ度の平均: 4.5
2 あまり役には立たない
3 言っていることはその通りなのだが...
4 C言語のカベ!ポインタを制覇する♪

さてさて,続けます。

char value;

であれば、これは「value」と言う名前のchar型(8ビット符号つき)変数である、ということがわかる。

char型イコール8ビット符号付きではありません。間違いです。
ビット数は CHAR_BITS (処理系に依存。limits.h にマクロがある)であり,符号も処理系に依存します。
以下,疲れる説明が続く。

char* value;

なんて書式のほうがわかりやすかったはずだ。
今は文法的にこれは許されていないから、ポインタ変数の定義をする場合は、普通は仕方なく、

char * value;

と「*」を離して書くくらいしかできない。

「今」??? 「文法的に許されていない」??? 何のことだ???
どういう意味? 誰か説明を…。

実は最近のコンパイラはこのどちらの表現でもちゃんと解釈して「通る」のだが、古いコンパイラではこの文法を通さないものもあったため、教科書ではどうしても、

char *value;

と書いてあるものが多いのだ。そのため、多くのC言語プログラマ

char* value;

と、プログラムが書いてあると、違和感を覚える、というようになってしまっている。

古いコンパイラについて詳しくないけど,これって本当なんでしょうか? 初耳です。詳しい方いましたら教えてください。

それでも、最近のプログラマではこの「わかりやすい、常識はずれ」の書き方をちゃんとしている人も見かける。

うーん…。意味をくみ取れない。何が常識はずれなんでしょうか?
char* value;
形式がわかりやすい,常識はずれって事? 私の認識と違うなぁ。
私の頭の中では「char」と「*」と「value」が別々のトークンと見なされているからスペースがどこにあろうとなかろうと
『「char」「*」「value」「;」』
なんですよね。ショートコーディングしてたこともあるかもしれませんが,その前からそういう解釈。ショートコーディング以前は
char * value;
とか書いてたし。*1


(続く)

追記

ときどきの雑記帖 リターンズ 2007年11月(中旬)

識別子と演算子がくっついていたら別々のものとして解析できないなんて莫迦なものでなければ。でもその莫迦なものであった場合には通常の式においても x+yとかって圧縮できないことになりませんかねえ?

ですよねー。エラーになるようにparseする方が面倒な気が。

(続く)

わくわく。

ちょwww。なんで底辺人が有名人に覗かれているんだwww

*1:ああっ!今思えばセミコロンを特別視してますね…。