C言語なら俺に聞け! Part 94

このエントリーをはてなブックマークに追加
119デフォルトの名無しさん
char c[10] とか char c[128] とか。
なんでいつも適当な確保なのですか?
120デフォルトの名無しさん:04/11/02 22:55:17
適当には二つの意味がある!
121デフォルトの名無しさん:04/11/02 22:58:35
128が中途半端だと感じてるんだろ
122大原ゆき ◆6iqfpMYUkI :04/11/02 23:05:59
>>119
貴方の質問から何を聞きたいのかを想像して答えますが、
例えば、cが入力用のバッファとして使われる場合、人が何文字入力するか、
なんていうことは予め判りませんよね。
だから、とりあえず入力される数としてあり得る範囲を確保し、
それ以上の要素を入力しても、配列に納める分以上は納めないようにする処理
を書いてあげないといけません。
例えば、フーリェ変換用のバッファとして使う場合などの特定用途では確保する
要素数は初めから判っているので、プログラム中で使われる配列の要素数が最小
になるように勤めるとより良いです。
123デフォルトの名無しさん:04/11/02 23:06:16
>>121
そうです。
124デフォルトの名無しさん:04/11/02 23:09:41
いいえ、適当ではありません。
128には意味があります。
125デフォルトの名無しさん:04/11/02 23:09:44
>>122
どうもありがとうございます。あまり確保しすぎてもいけないと
も聞いたのですですが、どのぐらいまでなら確保してもよいのですか?
126大原ゆき ◆6iqfpMYUkI :04/11/02 23:10:22
>>123
例えば、フーリェ変換(計算機では普通FFT)だと2の倍数にしないとできません。
2の倍数というのはわりとよく出てきますよ。
127デフォルトの名無しさん:04/11/02 23:11:02
友人に #define は問題があるから C では enum 使えと言われたのですが本当でしょうか…?
例えばこんな感じで

×#define 1 A
○enum { A = 1 };
128大原ゆき ◆6iqfpMYUkI :04/11/02 23:11:11
>>125
場合によります。
129デフォルトの名無しさん:04/11/02 23:12:48
>>127
問題があるのは、あなた使い方の方です
130デフォルトの名無しさん:04/11/02 23:13:26
わらた
131127:04/11/02 23:14:25
- #define 1 A
+ #define A 1

お恥ずかしい…
132116:04/11/02 23:17:48
>>118
やはり前置増分演算子の場合は問題ないんですね。
ありがとうございました。
133大原ゆき ◆6iqfpMYUkI :04/11/02 23:19:45
>>127
defineはエラーがあってもコンパイル時にエラーとして検出できませんし、
フラグの値を設定したいときのような場合、値の数が極端に多いと、
ユニークな数を果して割り当てられたかどうかを確かめるのは困難です。
例えば、
#define PI 3.44
という定義があったとして、これを使ったコードにエラーがあったとき、
エラーメッセージにPIという文字は見ることができません。
3.44という良く解からない数字として表れるのです。
書いた人はたぶんπのつもりだったのでしょうが、あいにくπは3.14…です。
134デフォルトの名無しさん:04/11/02 23:22:38
>>133
毎回毎回長文&駄文はネタなの
135大原ゆき ◆6iqfpMYUkI :04/11/02 23:24:23
>>127
一般的にC++ではdefineはなるべく使うべきではありません。
幸運な事に、代わりに使える機能がいくつか用意されました。
Cでdefineとして書いていたものはtemplate、inline関数、const定数
として置き換え可能です。
enumはユニークな数を割り振りたいときや、const定数をクラス内部で初期値設定
できない時などに使うと良いでしょう。
定数を宣言するときは大抵const定数で良いでしょうね。