トップページ⇒tech
125コメント40KB

★ ANSI Cでいこうよ ★

■ このスレッドは過去ログ倉庫に格納されています
0001標準なおんなのこNGNG
       _ -――-,-―- 、
      _/          ヽ _
    /  , ,         ヽ ヽX 7ヽ、
  i' / // / /  | ヽヾ.   、 ヽ ヽX X ゝ
 /| | | | |_⊥」| || | |.|」⊥_ |  iミミ、X /
  V| | || i|_⊥、W./ヽ|,|⊥_||ヽ|≡= x/
    ヽNヽ| ,|し.j     _|し.jl|` |T Τ7   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
     | |.{  ̄  .'_,    ̄ ||  | | ||+ヽ < あははー、ANSI Cでプログラムしませんか?
     | | i\        .1 |  | | || +|  \_______
    |  | |  i : エ エ :´ : | |  | | ||++|
    | _ | |  |´  ̄只 ̄ ヽ| |  |_| ||++|
    / ||  |  ノ || ヾ   | |  | ヽ| |++|
    | ||  |- ´ i | | i `ー|  |  |  | ||++|
    | |   |  | | .| |  |  | |  | || ̄

標準規格限定です。
標準ライブラリ、STLなどなど

MFC,VCLなどは禁止です
010296NGNG
>>101
現実的な制約でないというと、ほとんどの環境では負値に2の補数を使う
からということかな?
その場合でも、-(-32767-1)は-32768になってしまって正しい動作が期待
できないから、やはりそんな値を使うこと自体が間違っている。論理演算
なら問題ないだろうけど、その場合には16ビットの範囲を守ることはたや
すいからね。
もし、-2147483648〜+2147483647が一般的な範囲だと思っているなら、
それはとんでもない間違いだよ。
0103デフォルトの名無しさんNGNG
>>102
昔の16bit時代からやってる人なら、ちょっと大きな数がでてきそうな
ときには int ではなく long と書くのが普通。

でも最近の人はわかんないよ。int = long あたりまえと思ってる人が
多い。あと long = 32bit と仮定してるクソコードもたくさんあって、
Linux-AXP なんかで困る。
0104デフォルトの名無しさんNGNG
Linuxのアプリケーションは、アドレスの表現に
unsigned long 使う風習があるんだけど
これってどう思う?
アドレス幅といっしょなのって、大抵intの方じゃない?
勘違いならごめんよ
0105デフォルトの名無しさんNGNG
linux,win32,BeOSでとりあえず動くプログラム組んだけど
2の補数とワードのビット数をそろえるように設定するのは必須ですな。
完全 ISO-C じゃ非常に冗長なコードになるから
1の補数とかの環境は初めから捨てました。あとライブラリ関数が
かなり使えないのが苦しい。汎用性のある ISO-C のコードって
printf("hello"); くらいじゃないかな。(藁
まー、あまり期待はしてないけど K&R 時代よりは多少マシって
具合ですな。基本構造式まで処理系依存では逝ってしまいますので…。(藁
0106105NGNG
あ、でも型変換とか処理系依存が激しいんだよね…。
これが適切に決まっていればもっと良いコードが書けるんだけど
これも1の補数と2の補数の両方の存在を見とめているためだ…。
ちとむかつく。(藁
0107デフォルトの名無しさんNGNG
>>104
そもそもポインタ=数値という前提でプログラムすること自体が規格外
0108デフォルトの名無しさんNGNG
>>107
そんなことないよ。intptr_tを使えばいいだけのこと。
0109デフォルトの名無しさんNGNG
>>105-106
Linux, Win32, BeOSなんて、比較的よく似たプラットフォームだからそんな
ことを言っていられるんだと思うよ。
8ビット〜64ビットCPUを対象にした組み込み用の汎用ライブラリを実装する
場合には、2の補数はともかく、算術型のサイズを特定することなど不可能。
それに、汎用性のあるISO Cのコードがprintf("hello");ぐらいというのは
まったく意味不明。

型変換が処理系依存って、有符合整数と無符合整数の間の型変換のこと?
そんなのはどちらでも正の値と分かっている場合以外、型変換すること自体
が間違っているよ。そもそも両者を混在させる必要なんてそうそうないはず。
0110デフォルトの名無しさんNGNG
109はド素人だな。放置。
0111デフォルトの名無しさんNGNG
>>104 intは演算レジスタでは?
0112104NGNG
>>107
そう。規格外のことだと思う。
でもカーネル読んでるとそういうの多くてさ・・・

>>111
大抵、アドレスバスとデータバスの幅は同じだよね。視野狭い?
0113デフォルトの名無しさんNGNG
暗視?
0114デフォルトの名無しさんNGNG
malloc()で領域を確保していないポインタに対して
freeをしたらどうなりますか?
怖くてできません。
0115デフォルトの名無しさんNGNG
>>114
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/free.3.html
0116デフォルトの名無しさんNGNG
C++は、もう破滅寸前。
ここらでSTLに挫折した、全体の95%相当のプログラマが
不買運動を起こし、消滅します。

ありがとうC言語!そしてC++さようなら!(^_^)また会えるといいね!

http://piza.2ch.net/test/read.cgi?bbs=tech&key=995820118&ls=100
0117デフォルトの名無しさんNGNG
C89/C99 ANSI Cの両規格の話が混ざっているので話が
すれ違う。

>>112 64bit環境では通常(MS以外)sizeof(int)=4 sizeof(int *)=8
0118デフォルトの名無しさんNGNG
>>112
Pentium以降のデータバスって64bitじゃなかった?

>>117
ちと意味が違うのでは?

64bit環境でintが32bitなのは、intも64bitにすると必然的に
longも64bitになって、charとshortだけじゃ16bitの型あたり
を切り捨てなきゃならないからでしょ?

既に、intがCPUのワード幅であるって前提は崩れてるよ
0119デフォルトの名無しさんNGNG
ポインタのサイズが問題になるケースってどんなときなんでしょうか?
先月からCやりだしたのでいまいちよく分かりません。
0120デフォルトの名無しさんNGNG
>>119
ポインタのサイズはすべて一定です。。
short a;
int b = 100;
a = &b;
とかすれば問題だが...
0121デフォルトの名無しさんNGNG
>>120
ANSI Cってポインタのサイズは同一であるとみとめてたっけ・・・。
コード領域を指すためのポインタとデータを指すためのポインタのサイズが違うことは多々ある
0122120NGNG
>>121
そーだったんですか。はずかシー。
0123デフォルトの名無しさんNGNG
>>118 >>104 == >>112 だから>>112は sizeof(int) == sizeof(int *)
と思っているってこと。
0124デフォルトの名無しさんNGNG
>>122
でないとコンパクトモデルやミディアムモデルのMS-DOSの処理系が
規格準拠になりえないだろ
0125デフォルトの名無しさんNGNG
コンパクトモデルはセグメント関係ないので、
全てのポインタは同じ幅(=16bit)と考えていいのでは?
(みであむは知らない)
■ このスレッドは過去ログ倉庫に格納されています