アカウント名:
パスワード:
int *n = NULL;*n = 5;
int *n = NULL;*n = 5; いくらポインタに対する理解が適当でも、このコードを動くと思う人は、ほとんどいないと思うのだが。
その昔MS-DOSというメモリ保護のないOSがあってだな(以下3000コメントの懐古レス略)おそるべきことに「なんかnull pointer assignmentとか出てるけど動いてるんだからいいじゃん」という人たちが実在したんですよ。
その昔VAXというマシンがあってだな、おそるべきことにゼロ番地アクセスで例外を起こさなくてだな、「なんかnull pointerアクセスしているけど動いてるんだからいいじゃん」というプログラムが沢山あったんですよ。
そうじゃなくて、クラスかそうでないかで分けるのが普通では?
有用なプログラムの多くはCからのI/Fも持ってます。そういうものは結構そうなってますよ。
本当は、 char value;char* value; なんて書式のほうがわかりやすかったはずだ。今は文法的にこれは許されていないから、ポインタ変数の定義をする場合は、普通は仕方なく、 char * value; と「*」を離して書くくらいしかできない。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell
本当にひどい記事だが (スコア:1)
Re:本当にひどい記事だが (スコア:2, おもしろおかしい)
その昔MS-DOSというメモリ保護のないOSがあってだな(以下3000コメントの懐古レス略)おそるべきことに「なんかnull pointer assignmentとか出てるけど動いてるんだからいいじゃん」という人たちが実在したんですよ。
Re: (スコア:0)
気持ち悪いので直そうと思ったんだけど、
1. 結構でかいアプリで、ざっと見ただけでは見当つけられず
2. TD持ってきてwatch pointしかけたら死ぬほど遅くて話にならず
:
n. 結局見なかったことに…
ということがありました。
68Kのバスエラーが羨ましかった。
Re:本当にひどい記事だが (スコア:2, 興味深い)
Re: (スコア:0)
Re: (スコア:0)
INT 0は…0除算か。注意してりゃ大丈夫ですかねえ。
Re: (スコア:0)
その昔VAXというマシンがあってだな、おそるべきことにゼロ番地アクセスで例外を起こさなくてだな、「なんかnull pointerアクセスしているけど動いてるんだからいいじゃん」というプログラムが沢山あったんですよ。
Re: (スコア:0)
「そのすぐ後に5で上書きされる」とか思ってそう。
#そのために「int* n = NULL」という記法が編み出されたというか。
Re:本当にひどい記事だが (スコア:1)
Re:本当にひどい記事だが (スコア:2, すばらしい洞察)
int*と書けば、「整数のポインタ型」という型として認識出きるので混乱が少なくなります。typedefとか使ってpintとかにするとより良い感じですね。
TAなどで指導する時にも、そのように説明してるんですけど、如何せん教科書と記法が違うのが最大の問題です。
*の意味が宣言時と参照時?では違うということをきちんと説明してない本や人が多すぎorz
Re: (スコア:0)
初めてC言語に触ったとき、この文法で混乱しました。
宣言時は*ありでHLなのに、使用時は*があると(HL)で、なしでHLだもんだから。
#Z80は入門にはいい石だった。68000はもっといい石だった。
Re:本当にひどい記事だが (スコア:1)
そうじゃなくて、クラスかそうでないかで分けるのが普通では?
int *n = ...;
CObject* v = ...;
という具合に。Objective-Cとかでもそうかな。
理由としては、組み込み型の場合だと極端な例では
int a[] = {1, 2, 3}, *p = NULL, b = 3;
とかすることもままあるけど、クラスだと宣言は一個ずつことが多いことだと思います。
Best regards, でぃーすけ
Re:本当にひどい記事だが (スコア:1)
Re:本当にひどい記事だが (スコア:1)
その上で、sourceforgeとか、googlecodesとか見てもらえば良いと思います。有用なプログラムの多くはCからのI/Fも持ってます。そういうものは結構そうなってますよ。
Best regards, でぃーすけ
Re:本当にひどい記事だが (スコア:1)
本題に戻ると、そもそも、あなたが普通だと言ったのが事の始まりなのだから、私に検証させるという労を負わせるのではなく、ご自分が定量的に示してください。
extern "C"な関数は、基本的にCプログラマがユーザなのだから、そういう場合にはすべてCスタイルで宣言するのが当然だと思いますが、もしかしてこれがあなたの主張の根拠ですか?
Re: (スコア:0)
int* n, m; と書いた時に n はポインタ型でmは整数型というのをぱっと見で区別するのが面倒だからでは
int *n, m; ならばまあ明らかだし
int m, *n; なら間違いようがない
…一つの宣言で違う型の変数をいくつも宣言するのがそもそも混乱の元だというのはよくわかっています
Re: (スコア:0)
int* n;
int m;
あるいは
typedef int* int_ptr;
みたいに本当にtypedefしてしまうとか。
Re:本当にひどい記事だが (スコア:1)
Re: (スコア:0)