プログラミング質問すれ Part1at UNIX
プログラミング質問すれ Part1 - 暇つぶし2ch202:名無しさん@お腹いっぱい。
08/03/28 17:05:20
>iconv_open("SJIS", "EUC-JP");

この引数に使える文字セットってどこを見ればわかりますか?

203:202
08/03/28 17:16:10
もしくは、現在の文字コードの文字列をOSから取得することはできますか?

204:名無しさん@お腹いっぱい。
08/03/28 17:17:41
>>202
OSは何?

>>203
「現在の文字コードの文字列」って?

205:202
08/03/28 17:33:14
Mac OS X です。

現在の文字コードって、GUIから入力されたときの文字コードっていうか。。。

206:名無しさん@お腹いっぱい。
08/03/28 18:15:54
ひどいマルチだ。
スレリンク(tech板:26番)
スレリンク(linux板:691番)

207:名無しさん@お腹いっぱい。
08/03/28 19:23:33
$ iconv -l
とか、
iconv_open("char", "wchar_t")
とかの話?

208:名無しさん@お腹いっぱい。
08/03/30 16:15:16
env
とかで調べろ

209:名無しさん@お腹いっぱい。
08/03/31 11:37:44

 黒 タ イ ツ の 暗 黒 シ ュ シ ュ ト リ ア ン

210:名無しさん@お腹いっぱい。
08/04/03 01:28:48
Hello world

211:名無しさん@お腹いっぱい。
08/05/28 09:28:01
ムー板に書きましたが、誰も相手にしてくれません:

>struct timeval tv;

の値って、
doubleの変数に入出力できたりしますか?

というか、timeval <---> double 変換したいのですが、
どういうコードでできますか?

212:名無しさん@お腹いっぱい。
08/05/28 09:31:05
>>211
期待する動作と、自分でやったことと、自分でやった結果(期待とどう違ったのか)、説明が
抜けてるから相手にされないんだろ。無理もない。

213:211
08/05/28 09:36:54
いや、標準の関数とかマクロでできると思ってるので、
その名称を教えて頂きたいだけなんですが。

214:名無しさん@お腹いっぱい。
08/05/28 10:06:01
ムー板というと
UFOの真実! とかそういうネタを扱う板だろうか?

215:名無しさん@お腹いっぱい。
08/05/28 10:17:13
>>211
struct timeval tv;
double d;

d = (double)(tv.tv_sec + tv.tv_usec/1000000.0);

>>212
わからないなら黙ってろ

216:名無しさん@お腹いっぱい。
08/05/28 10:17:28
そういうのが好きな人の集まった板でつ。

関連板: 魔板

217:211
08/05/28 10:18:30
>>215
知りたいのはその内容ですた orz

218:名無しさん@お腹いっぱい。
08/05/28 10:24:32
>>213 >212

219:名無しさん@お腹いっぱい。
08/05/28 10:26:19
>>218
>>215 で解決済。

期待する動作は自明。
「自分でやったことと、自分でやった結果」なんて書かなくてもわかる。

220:名無しさん@お腹いっぱい。
08/05/28 10:34:32
>>219
いやね、 tv.tv_sec*1000000.0 + tv.tv_usec なんて答えもあり得るし、
そもそも >215 で正解なら、そんなもん真っ先に自分で書くだろうから
何か変わった変換を期待してるか、そうでもなけりゃコードレベルで
ミスってるんじゃないかと思っちゃったんだよ。

> 「自分でやったことと、自分でやった結果」なんて書かなくてもわかる。
おぉ。エスパー乙。
あ、「こんな質問する人が自分で何かやってるわけない」、ってことかな。

221:名無しさん@お腹いっぱい。
08/05/28 10:37:36
エスパーすると、
tv.tv_usecを100万で割る時に、末尾の「.0」を付け忘れて
int扱いで切り捨てられたとかだろ。

222:名無しさん@お腹いっぱい。
08/05/28 17:58:12
>>215
相変わらず、素人丸出し駄目回答で粋がっているのか。
自ら恥晒すことないのに… 引っ込んでなよ。

223:名無しさん@お腹いっぱい。
08/05/28 18:13:22
>>222
>>217

224:名無しさん@お腹いっぱい。
08/05/28 18:52:17
具体的に指摘されないとわからないようだ。本当にヘボなんだな。

d = (double)(tv.tv_sec + tv.tv_usec * 1e-6);
乗算をつかう理由は二つある。先生に聞いてきなさい。www

225:名無しさん@お腹いっぱい。
08/06/02 19:05:21
2chに書き込む手順を教えてください

226:名無しさん@お腹いっぱい。
08/06/02 19:07:12
1.10年ROMる。
2.書き込みたいスレで書き込んでも良いか質問する
 Yes→書き込む
 No→1へ

227:名無しさん@お腹いっぱい。
08/06/03 11:22:39
プログラムからファイル書き込みするとして、
ファイルの権限付与はどういうAPIで行うのでしょうか?

できればファイルを書き込む前に設定したいのですが、
umaskっていうAPIあるのでしょうか?
ググっても見あたりませんが。

228:名無しさん@お腹いっぱい。
08/06/03 11:47:51
1ページ目で見つかってますが。

229:227
08/06/03 11:49:24
thx>>228

あ、UNIX とか プログラミングとか余計なワードを入れたから混乱しましたが、
URLリンク(www.linux.or.jp)
で良いわけですか。

もしくは、
URLリンク(www.linux.or.jp)
かな。

230:227
08/06/03 11:52:03
良く考えると、umaskだと、
プログラム自身がファイルを書き出すときの設定を行うわけではなくて、
ディレクトリの設定変えてしまうわけですよね。
行儀が悪いですよね。

やっぱ、chmodかな。

231:名無しさん@お腹いっぱい。
08/06/03 12:00:10
関連質問させて下さい。

rootユーザーがファイルを作成すると、そのディレクトリがリード権限になってしまったりする場合ありますか?

232:名無しさん@お腹いっぱい。
08/06/03 12:39:17
>>230
ちげーよ。
umaskは既に存在するファイル(ディレクトリ)には何の影響も及ぼさない。
そのプロセスが「作成する」ファイル(ディレクトリ)のモードのマスクを設定する。
umaskはプロセス固有の情報なので、作成したファイル(ディレクトリ)には記録されない。

>>231
ならない。

キミ、根本的に誤解しているから、基本から調べなおす事をすすめる。

233:227
08/06/03 12:42:12
とりあえずthx>>232

234:名無しさん@お腹いっぱい。
08/06/04 07:29:17
>>226
質問はどうやって書き込むかをどうやって質問しますか

235:名無しさん@お腹いっぱい。
08/06/04 08:12:33
「仮にぼくが質問できるようになったとしよう」と仮定法で進めてはどうか?

236:名無しさん@お腹いっぱい。
08/06/04 16:44:37
書き込む方法についての質問を書き込む方法は?

237:名無しさん@お腹いっぱい。
08/06/05 13:49:46
書き込む方法が分からないまま書き込んでいますか?

238:名無しさん@お腹いっぱい。
08/07/31 19:26:13
プログラミングしりとり
スレリンク(575板)l50

239:名無しさん@お腹いっぱい。
08/10/05 18:30:14
プログラム中(C言語)にて/dev/ttyA1やttyA0といったデバイスファイルに対し
ボーレート・パリティの設定をioctl関数で行いたいんだけど、
渡す引数等がわかりません。

ご存知の方教えてください。


240:名無しさん@お腹いっぱい。
08/10/05 19:04:16
>>239
ioctl()をじかに呼ばずに、tcsetattr()使った方がいいよ。

241:239
08/10/05 20:19:05
>>240
ありがとうございます。
tcsetattr()は初めて聞く関数名でした。
tcsetattrはioctlをラッピングしたAPIと考えてよろしいのですか?



242:名無しさん@お腹いっぱい。
08/10/05 20:47:21
>>241
ラッパーと考えていいよ。
ioctl()直接の場合、OSによって TCGETAだったりTCGETSだったり、やりかたが変わる。
tcsetattr()を使えば、OS共通で同じやりかた。
struct termiosに値をセットして呼べばいい。

243:239
08/10/05 23:10:30
>>242
丁寧にありがとうございます。
早速試してみます。

244:名無しさん@お腹いっぱい。
08/11/04 08:16:43
/etc/hostsを参照する場合って何のライブラリをつかうんですか?


245:名無しさん@お腹いっぱい。
08/11/04 08:20:14
>>244
gethostent()

246:名無しさん@お腹いっぱい。
08/11/08 16:50:36
ダミーのカーネルドライバを作って/dev にデバイスを生成し
mmap経由でエンドアプリとデバイスアクセスアプリとやりとりをするレイヤー的なものを作ろうと思っているのですが
解析しやすいソースとか資料になるサイトがあれば紹介願います。
ちなみにver7.0です。
なんかver6.*からいろいろ変更があるみたいで拾ったソースとか引数が違っていたりしました。


247:名無しさん@お腹いっぱい。
08/11/08 17:28:39
Windows7か。もうソースまで流出したのか。

248:名無しさん@お腹いっぱい。
08/11/10 00:17:14
>>246
fuseとか。

249:246
08/11/10 12:11:30
>>248 あんがとです。
fuseはドライバではなくてエミュレータのようです。
v4l関連を追ってみることにします。

250:名無しさん@お腹いっぱい。
08/11/10 18:01:49
エミュ…?

251:名無しさん@お腹いっぱい。
08/11/10 18:09:34
こ、、工ミュ...?

252:名無しさん@お腹いっぱい。
08/11/12 00:32:03
なんだ、女か。

253:名無しさん@お腹いっぱい。
08/11/25 10:42:53
FreeBSDでカーネルドライバ作るとき機種毎の関数を同じ名称にして
別のファイルに分散して設定ファイルを読み込んでデバイスIDとのマッチングを行ったあと
該当ファイルを読み込む形にしようとおもうのですが

設定ファイルの置き場所に関してルール(例えば/etcとか)があるのか
サブプログラムもkoでないといけないのか
ユーザープログラムと同じようにsoにしてdlopenとdlsym使っていいのか
そしてその場合の置き場所に妥当なところを
教えてくださいませ。


254:名無しさん@お腹いっぱい。
08/11/28 22:41:10
エクセルのマクロでプログラミングをしています
その内容は「じゃんけん」です
はい=グー いいえ=チョキ キャンセル=パー にしたいのですが
どうやればよいのでしょうか?
教えてください




255:名無しさん@お腹いっぱい。
08/11/30 20:42:22
>253
カーネルドライバは基本的にファイルシステムの
マウントより先に初期化されるわけでして、ハイ。

256:名無しさん@お腹いっぱい。
08/11/30 20:53:39
>>255
そんなことはわかってるよ。
だから、ファイルシステムのマウントより前に読むために、
例えば/etcとかの特定の置き場所があるのか、
koにする必要があるのか、dlopenとdlsymを使っていいのかを聞いてるんだろ。

257:名無しさん@お腹いっぱい。
08/12/03 11:51:37
>>256 そのとおり!!
現実問題としてloader.confを読んでいるときはファイルシステムは成立しているはずだから
loader.confに記述するかkldloadでスタートできるならいいのかなと思っています。

デバイスリストなどユーザーサイドで編集できるようにしておけば
プログラムの再コンパイルなどしないでもデバイスIDを登録すれば使えるようにしたいのです。
そのための対応ライブラリーのロードです。

現実問題として同じICチップを使っているデバイスIDの違う製品がでると
いちいちソースに手を入れてビルドし直さなくてはいけないようなことがあったからです。


258:名無しさん@お腹いっぱい。
08/12/04 02:14:01
C言語で質問なんですが、二つの実数が小数点1ケタまで等しいとき
に~するみたいにしたいんですけど、
if(a == b){

}
ってやったら実数が完全に等しくないといけないじゃないですか・・・
どうやれば上記のようにできますか?

259:名無しさん@お腹いっぱい。
08/12/04 02:25:28
丸めろ

260:258
08/12/04 09:07:24
丸めるってなんですか?
初心者なのであまりくわしくないです。

261:名無しさん@お腹いっぱい。
08/12/04 09:56:38
珍しいスレが上がってると思ったら
なんだ、釣りか……

262:名無しさん@お腹いっぱい。
08/12/04 10:19:18
>>259
引っかけ問題に引っかかったね。

「小数点1ケタまで等しい」→「小数点1ケタ目までの数字が同じ」
だから、丸めたら不正解。

263:名無しさん@お腹いっぱい。
08/12/04 10:24:13
if (fabs(a - b) < 0.1)

264:名無しさん@お腹いっぱい。
08/12/04 10:27:49
>>263
それだと 1.09 と 1.1 でも一致とみなされる

>>262 参照

265:名無しさん@お腹いっぱい。
08/12/04 10:31:23
>>262 は抜きして、丸める方式でOKだとしても、

>>263 だと 1.11 と 1.02 が一致と判定されるから駄目だな

266:名無しさん@お腹いっぱい。
08/12/04 10:42:06
1.11と1.02は偽
1.00と1.09は真

実際はこんな比較を行いたいわけがない。

267:名無しさん@お腹いっぱい。
08/12/04 10:48:37
>>266
数値符号の生成処理なんかだと、
文字通りの数字の一致を判定したいことがあるよ。

1.11と1.02は偽
1.00と1.09は真

そういう比較を行ないたい。

268:名無しさん@お腹いっぱい。
08/12/04 11:08:11
文字列化シロ

269:名無しさん@お腹いっぱい。
08/12/04 11:13:46
なんで誰も10倍してfloorしろとアドバイスしてやらないんだ

270:名無しさん@お腹いっぱい。
08/12/04 11:57:36
オーバーフローするかもしれんじゃん。

271:名無しさん@お腹いっぱい。
08/12/04 14:18:50
そんなでかいdoubleなら、小数点以下は0だから、別チェックを前に入れるだけ

272:名無しさん@お腹いっぱい。
08/12/04 20:04:28
>>269にツッコミを入れるなら floorでなくてIntだろ。
floorだと-2.0と-2.3が違う値になる。
だから不正解
それと実数は10倍してintだと化けることがあることを忘れるな。
整数部と小数部を分離して
整数部チェックの後
小数部の判定をすればいい

273:名無しさん@お腹いっぱい。
08/12/04 20:09:49
そろそろ正しいコード書いて見せろよ

274:名無しさん@お腹いっぱい。
08/12/04 22:02:12
珍しいスレが上がってると思ったら
なんだ、釣りか……

275:名無しさん@お腹いっぱい。
08/12/04 22:10:07
んじゃ、俺が。

int compare(double a, double b)
{
char s1[512], s2[512], p;

snprintf(s1, sizeof(s1), "%f", a);
if ((p = strchr(s1, '.')) && p[1])
p[2] = 0;

snprintf(s2, sizeof(s2), "%f", b);
if ((p = strchr(s2, '.')) && p[1])
p[2] = 0;
return !strcmp(s1, s2);
}

276:名無しさん@お腹いっぱい。
08/12/05 07:10:19
>>275
そんなことしなくても、
sprintf() で "%.1f" のフォーマットで文字列化すれば
最初から小数点以下第1位までで文字列カットできる。

277:名無しさん@お腹いっぱい。
08/12/05 07:16:16
>>276
アフォか。"%.1f" だと丸められてしまうだろ。

278:名無しさん@お腹いっぱい。
08/12/05 08:58:20
指摘される前になおしておこう。

int compare(double a, double b)
{
char s1[512], s2[512], *p;

snprintf(s1, sizeof(s1), "%f", a);
if ((p = strchr(s1, '.')) && p[1])
p[2] = 0;

snprintf(s2, sizeof(s2), "%f", b);
if ((p = strchr(s2, '.')) && p[1])
p[2] = 0;
return !strcmp(s1, s2);
}

279:名無しさん@お腹いっぱい。
08/12/05 09:27:12
>>278
別の指摘するよ。

"%f" は、デフォで小数以下6桁精度に丸められる。("%.6f"と同じ)
なので、1.9999999 が、2.0 に丸められてしまう。

280:名無しさん@お腹いっぱい。
08/12/05 10:44:50
ふむ、10倍するのも計算誤差で小数点第1位が変わる可能性があるな。
そもそも、外部表現から浮動小数点に変換した時点で誤差が発生するから、
BCD使えという結論か。

281:名無しさん@お腹いっぱい。
08/12/05 11:20:41
丸め方式はFPUに指定コードを与えれば変えることができる。
そもそも精度を取り違えている。6桁の精度に対して10桁の演算精度があるなら
最下位2桁部分の丸めで精度が狂うことはない。
それは最初の質問者が「文字」で質問していたことでも分かる。

今回の場合無理に比較するのではなくて
二つの引き算した結果の符号をとって(絶対値化)
その値から0.1引いた値が正ならfalse
というのが一番無難。


282:名無しさん@お腹いっぱい。
08/12/05 11:39:11
>>281
それ、>>263 と同じ。
263は、>>264-265 で否決。

283:名無しさん@お腹いっぱい。
08/12/05 12:04:28
IEEE 754 として、10倍して整数部をとったんじゃだめな具体例を誰かプリーズ。


284:名無しさん@お腹いっぱい。
08/12/05 13:03:09
>>283 仮数部フルにつかってたらだめだろ。
せめて整数化して小数部だけにしてからからという前提にシロ


285:名無しさん@お腹いっぱい。
08/12/05 13:15:16
だから、具体例を。

double f = 0.1;
f = floor(f*10.0);
printf("%d\n",f==1.0);

=> 1

だよ。

286:名無しさん@お腹いっぱい。
08/12/05 14:38:49
a = 300000000000000.3125;
b = 300000000000000.3750;
printf("%f %f %d\n", a, b, floor(a * 10) == floor(b * 10));


287:名無しさん@お腹いっぱい。
08/12/05 17:36:14
なるほど。わかったよ。

正に限ると、
floor(a) == floor(b) && floor((a-floor(a))*10) == floor((b-floor(b))*10)
でおけ?

288:258
08/12/05 23:03:41
ちなみに実数は0より小さいです。それで小数点2桁目を四捨五入したいです。
一応自分で作ったんですが

double x=0.15;
int a;
x+=0.05;
a=x*10;
x=(double)a/10.0;

これで大丈夫ですかね?

289:258
08/12/05 23:04:35
↑間違えました。0でなく1より小さいです。

290:名無しさん@お腹いっぱい。
08/12/05 23:05:41
>>267
お前らあほだな。


sprintfとstrncmpで解決だろ。

291:名無しさん@お腹いっぱい。
08/12/05 23:24:56
覆面算をマクロで解きたいのですが教えてください
B、C、Dは0を除外

    C A B
 +)  B A C
----------------------
  D A B A


292:名無しさん@お腹いっぱい。
08/12/05 23:29:42
マクロってm4あたり?

293:名無しさん@お腹いっぱい。
08/12/05 23:31:33
>>292
エクセルのマクロです

294:名無しさん@お腹いっぱい。
08/12/05 23:42:27
まったく板ちがいです。おひきとりください。

295:名無しさん@お腹いっぱい。
08/12/05 23:44:00
失礼しました

296:名無しさん@お腹いっぱい。
08/12/06 00:29:52
>>288
0より小さい実数は負なのだが…
中学数学をやり直せ。

297:名無しさん@お腹いっぱい。
08/12/06 10:16:03
>>296
0より小くて負よりも大きい数oがあるとしたら?

298:名無しさん@お腹いっぱい。
08/12/06 10:40:46
>>290
sprintf()する時に、"%f"の変換で勝手に四捨五入されるから不可。

299:名無しさん@お腹いっぱい。
08/12/06 10:48:11
>>297
そんな実数があるのか?

300:名無しさん@お腹いっぱい。
08/12/06 11:37:11
1.0以下なら
10倍説でいいけれど >>287はかっこが足りないだろ
それに正が前提と言うならfabsなりabsなりいれればいいじゃないか。

あとsprintf関連のつっこみは四捨五入(rint)じやなくてroundだろ。
もちょっと「道具の仕様」はしっておこうよ

double演算でも特定のライブラリーを使っていると高速化のため「singleモード」に設定していて
丸め誤差も出やすくなったりしていることもある。もっぱらWinに多いけど
逆にlong doubleにしておけば丸め精度はでにくい。

今回の場合しょっぱなの「見た目の数字」なんだからsprintfでの誤差は
最初に認識した文字列にも反映されているはず

1以下限定なら文字列の段階で整数として入力するか
文字列できるほうがいい

しかしネタとして考えるならばbit比較とかマニアックな関数とか
論理的に完璧なものとかそういうものの方がおもしろい。

というかUNIX板なんだからネタとして解を求めるならbc前提にするとか
仮数部のビット比較してみるとか特定ツールにしぼるか
FreeBSDでのextendedというかlong doubleでの精度アップとか
もうちょい下のほうにするとかにシチクリ


301:名無しさん@お腹いっぱい。
08/12/06 11:47:11
使えるツール、足りないツールを作る。それがプログラミング
できない人は覚えたい。できる人でも穴はある。
UNIXはツールが多いようでつなぎも情報もすくないんだから
貴重なスレをあんまり算数の遊びみたいなんでスレを消費するない。
やるならせめてbcとかシェルとか局所的なものにしちくれ



302:名無しさん@お腹いっぱい。
08/12/06 11:50:30
>>300
> >>287はかっこが足りないだろ

どこが?

> それに正が前提と言うならfabsなりabsなりいれればいいじゃないか。

単純に入れたら、正=負とかいう馬鹿な結果が出るから、めんどうだっただけ。

303:名無しさん@お腹いっぱい。
08/12/06 12:27:28
貴重なスレって、長寿スレでも狙ってるのか? w
実数演算の話題はあまりないので結構楽しかったぞ。

304:名無しさん@お腹いっぱい。
08/12/06 12:45:32
板違いと思っていたから参戦しなかったが、
その辺のことはアメリカ人が詳しくまとめてるよ。
やつらは実数部でドル、小数部でセントを表すことをよくやるから。
いろいろな言語にBCD演算を入れる提案がつきないのもそのため。
exact calculation floating point number あたりでググってくれ。
IEEE 754を仮定して近似計算で、BCD相当の結果を出すものがたくさんある。
中にはbit演算で正規化されたIEEE 754表現を扱うものまである。

現代のCOBOL、Javaのページにもこんなんがあるしな。(単純なものだけ)
URLリンク(java.sun.com)

305:名無しさん@お腹いっぱい。
08/12/06 12:46:37
今のペースだと、Part1なのに10年以上あるスレってか

306:名無しさん@お腹いっぱい。
08/12/06 12:51:59
>>304
それは、内部表現を固定小数というか、
全部セントに統一しなかったアメリカ人が馬鹿なだけのような

307:名無しさん@お腹いっぱい。
08/12/06 12:58:41
金利計算とかあるからセントが最小単位じゃダメだろ。

308:名無しさん@お腹いっぱい。
08/12/06 13:04:25
>>300
お前は roundのことは四捨五入と言わないのか?

あと、>>287 に括弧が足りないところなんてないし。

もうちょっと「日本語」と「道具の仕様」は知っておこうよ

309:名無しさん@お腹いっぱい。
08/12/06 13:17:07
>>307
じゃあやっぱりBCD一択。

310:名無しさん@お腹いっぱい。
08/12/06 13:19:59
>>300
おいおい、(s)printfの "%f" 変換は、round() じゃなくて rint() 方式だよ。
(確認済み)

311:名無しさん@お腹いっぱい。
08/12/06 13:21:18
ジンバブエ・ドルも計算できる桁数無いといかんな。

312:名無しさん@お腹いっぱい。
08/12/06 16:30:25
インストールしたプリンタの一覧ってどうやって
取得できるのですか?

313:名無しさん@お腹いっぱい。
08/12/07 00:33:16
>>309
組み込みでBCDがないなら、
オペレーター多重化がないとプログラム書きづらいな。

314:名無しさん@お腹いっぱい。
08/12/07 07:34:44
無知晒した >>300 の釈明まだぁ?

315:名無しさん@お腹いっぱい。
08/12/07 10:39:11
sprintfで少数第2位まで出しておいて、strncmpで小数点1桁の文字列と比べれば丸めも減ったくれもどうでもいいだろ。

316:名無しさん@お腹いっぱい。
08/12/07 11:47:04
>>315
だから、sprintf()で小数第2位まで出す際に、sprintf()自体で丸めが起きるんだよ。
printf("%.2f", 1.099) → 1.10 と表示

あと、×少数 ○小数な、日本語くらい正確に使おうよ。

317:名無しさん@お腹いっぱい。
08/12/07 11:51:42
>>315
sprintfで小数第2位まで出す際に、
小数第3位が丸められるから、
その結果、小数第1位に繰り上がってしまうことがある。

よって、>>315 の言ってることは不正解。

318:名無しさん@お腹いっぱい。
08/12/07 12:41:31
doubleの有効桁は15~16なので>>278を改造して17桁とれば良い。

int compare(double a, double b)
{
char s1[512], s2[512], *p;

snprintf(s1, sizeof(s1), "%.17f", a);
if ((p = strchr(s1, '.')) && p[1])
p[2] = 0;

snprintf(s2, sizeof(s2), "%.17f", b);
if ((p = strchr(s2, '.')) && p[1])
p[2] = 0;
return !strcmp(s1, s2);
}

319:名無しさん@お腹いっぱい。
08/12/07 12:46:13
>>318
…ネタだよな?

320:名無しさん@お腹いっぱい。
08/12/07 22:48:58
>>317
じゃあ4位まで出すか。

321:名無しさん@お腹いっぱい。
08/12/07 23:05:57
>>320
sprintfで小数第4位まで出す際に、
小数第5位が丸められるから、
その結果、小数第1位に繰り上がってしまうことがある。

よって、>>320 の言ってることは不正解。

322:名無しさん@お腹いっぱい。
08/12/07 23:51:11
小数点指定なしでいいな。

323:名無しさん@お腹いっぱい。
08/12/08 16:56:18
>>303 UNIX関連のプログラミングの情報源として密度が薄まる
別にスレが長寿になる必要はない。

>>302 のは結果として役立たずなわけだから「~れば」とかいうのはいいわけでしかない。
できたような気になっているだけだ。

>>308 roundが四捨五入なんてプログラミング言語はない。
知らないなら覚えろ。常識
四捨五入は意図的にコンパイラが切り捨てコード使ってで作るものだ。

カッコなしで複数の条件列挙は
は言語によりなければエラーになるものがある。
イコールでの条件列挙は適切とは言えない。

速いからdoubleなんだしdoubleのデータの問題で
「初めからBCDで」とか論外

324:名無しさん@お腹いっぱい。
08/12/08 17:16:43
>>323
roundは普通の意味での四捨五入。(2進だから0捨1入)
rintは四捨五入ではなく、偶数への丸め。常識。知らないなら覚えろ。
おまえ、sprintfの件で、roundとrintを混同して指摘してただろ。>>300 で。


> カッコなしで複数の条件列挙は
> は言語によりなければエラーになるものがある。

「言語により」って、最初から C言語の話してるんだろ。
演算子の優先順位も知らなかったくせに、見苦しい言い訳するなw


結論:
>>300 = >>323 は自意識過剰のものすごい知ったか。

お前の言葉をそのまま返す、
「もうちょっと『道具の仕様』は知っておこうよ」

325:名無しさん@お腹いっぱい。
08/12/08 17:46:18
「~れば」とか「初めからBCDで」とか「」使って引用してるふりしながら、
どれも正確じゃないんだよな。
自分独自の解釈を随所におりまぜてそう。

326:名無しさん@お腹いっぱい。
08/12/08 20:12:00
はいはい逆にしてましたよ。間違えてました。RINTとROUND
恥ずかしくも「正しい解説のメモ」とかアップしているていたらく

どうせアタシャ低レベルなアセンブラプログラマーですよ。
でも今回いつCが前提になったんですか?
JavaScriptとかPerlもありだとみてたんですがね、

独自解釈でもなんでもちゃんと動くものを仕様書こみでつくれるからいいんです。

でも今回の件は
long doubleにキャストして
i386 FreeBSDに関して言えば
fpsetprec(FP_PE)
を使って10倍して差をとり整数化すればいいんですよね、
仮数部が内部で64bitになるので丸め誤差でません。

最初から10byteモードっていってましたよね。
理解できなかった?

どうして型キャストとかできないんですか?
floorとかsprintとか無駄過ぎ

机上の論議過ぎて実用性ゼロ

その点を言っているんです。
道具としてのUNIXでなくて
UNIXのためのプログラミングノーハウの話をしないなら
板違いだっていっているんだ。


327:名無しさん@お腹いっぱい。
08/12/08 20:26:33
>>326
> でも今回いつCが前提になったんですか?

>>258の1行目


328:名無しさん@お腹いっぱい。
08/12/08 20:40:08
今回いつ、「実数」がdouble以下で、かつ、
long double が double より精度高いプラットフォームが前提になったんですか?

329:名無しさん@お腹いっぱい。
08/12/08 20:41:01
こういうバカがチームにいると大変だな。お前、向いてない転職しろ。

330:名無しさん@お腹いっぱい。
08/12/08 21:17:38
たしか、JavaScriptもPerlも&&より==の方が強いよなぁ。
しかもこいつらってlong double的なの明示的に使えたっけ?

331:名無しさん@お腹いっぱい。
08/12/08 21:35:22
使えないな。
しかも、FPU使うコードなんて今時見ないぞ。

332:名無しさん@お腹いっぱい。
08/12/08 23:37:10
>>329
普通はこんなしょうもない問題にぶち当たらないようにコーディングするもんだ。

お前の卓越した知能wがチームの効率下げてるんじゃね?

333:名無しさん@お腹いっぱい。
08/12/08 23:55:42
自信満々で「仕様書込みで動くものをつくれるからいい」とか豪語しながら
仕様を逆に覚えてヘッポコなバグを作りこむクズはいらない。

334:名無しさん@お腹いっぱい。
08/12/09 00:00:34
>>332
つっこみどころはそこだけなんかよ
技術的なことにつっこんでくれよ

335:名無しさん@お腹いっぱい。
08/12/09 11:02:08
>>326
> 10倍して差をとり整数化すればいいんですよね、

ここ意味わからんかった。
これじゃ差が0.1以下であるという判定しかできないんじゃないの?
やっぱりfloor的なものがどこかにいるんでは?

336:名無しさん@お腹いっぱい。
08/12/09 13:32:00
彼の完璧な仕様に文句をつけてはいけない。

337:名無しさん@お腹いっぱい。
09/01/14 17:04:18
この問題なんですが、解答あってるでしょうか?

msgbox "変数aの値は" & a & " , 変数bの値は" & b

この文を先頭から2つ目の&までとその後の部分に分け、正しく2行で記述しなさい。
また、変数a,bの値がそれぞれ10,20である場合に、実行したときに表示される
メッセージボックスの中の記述内容を書きなさい。

解答。

msgbox"変数aの値は" & a &
msgbox"変数bの値は" &b

変数aの値は  10
変数bの値は  20



338:名無しさん@お腹いっぱい。
09/01/14 17:31:14
UNIX無関係なので板違い

339:名無しさん@お腹いっぱい。
09/01/14 22:36:54
金をdoubeで扱う勘定系プロジェクトに配属になったけど
ソッコーで抜けさせてもらったことがある
「おかしい計算が合わない…」とかいうつぶやきが遠くで聞こえてるうちに逃げてきた

340:名無しさん@お腹いっぱい。
09/01/14 22:39:50
あはははははは

341:名無しさん@お腹いっぱい。
09/01/14 23:40:05
>>326
> 仮数部が内部で64bitになるので丸め誤差でません。

何も理解してないw

342:名無しさん@お腹いっぱい。
09/01/14 23:53:11
仮数部を増やす方向にキャストしてから10倍すれば問題起きないよ。
それができるという前提がなかったからあの話がおかしかっただけで。

それよりおまえは1ヶ月以上前の話につっこんでも意味がないことを理解していない。

343:名無しさん@お腹いっぱい。
09/01/17 12:00:35
>>342 プログラミングという机上の空論で遊んでいるやつらに
現実的なプログラミングのノーハウをちらみさせても意味ない事に気づけ

ダメ系の算数野郎さんはとりあえずgccでπでも1万桁求めるにはどうしたらいいかとか
まっとうなプログラミングの道でもしめせばいいよ。
UNIXの場合必要なライブラリーはデスクトップを入れるとついてきたりしている。
あえて名称はかかんけどね、

だいたい元々の話がリアルな精度ではなくて「10進化された文字列」での話なんだから二進演算の精度うんぬんなんて実は関係ない。
どっちかというと「.」がらみの正規表現のプログラミングの方が正解で
それは最初に「文字列で」と書いているレスでおわっているわけだ。


344:名無しさん@お腹いっぱい。
09/01/30 14:26:14
コンパイル結果のファイル名ににタイムスタンプをつけたくて
Makefile中に以下のようにして
TIMESTAMP=`ls -l --time-style=long-iso $(OBJNAME).hex | awk '{print $6}' | sed 's/-//g'`
時間をとりだしているのですが、結果的にTIMESTAMPには
TIMESTAMP=rwrr 1 user user 601847 20090130 14:19 objname.hex
という値が格納されてしまいます。
実際にシェルから実行したら
20090130
という結果が表示されるのですが、なぜでしょうか?
ちなみに
TIMESTAMP=$(ls -l --time-style=long-iso $(OBJNAME).hex | awk '{print $6}' | sed 's/-//g')
でも結果は同じです。
アドバイスよろしくお願いします。


345:名無しさん@お腹いっぱい。
09/01/30 14:28:13
失礼しました。
TIMESTAMP=$(ls -l --time-style=long-iso $(OBJNAME).hex | awk '{print $6}' | sed 's/-//g')
ではなく
TIMESTAMP=$(shell ls -l --time-style=long-iso $(OBJNAME).hex | awk '{print $6}' | sed 's/-//g')
でした。


346:名無しさん@お腹いっぱい。
09/01/30 14:42:44
TIMESTAMP=`ls -l --time-style=long-iso $(OBJNAME).hex | awk '{print $6}' | sed 's/-//g'`
awkのprintの引数を$$6にしたらいけました。
何故でしょうか。
よく分かりません。

347:名無しさん@お腹いっぱい。
09/01/30 15:10:55
Makefile中では$に特別な意味があるから。


348:名無しさん@お腹いっぱい。
09/01/31 00:25:38
makeの変数展開

shの変数展開

awkの変数展開

349:名無しさん@お腹いっぱい。
09/02/05 21:48:12
ポインタじゃなくて、structの実体渡しで呼び出す関数を、
structの即値の引数で呼び出すことってできませんか?

どういうことかというと、

struct hoge {
int hoge_a;
char *hoge_b;
};

void func(struct hoge);

と宣言されてる時、

struct hoge hh = {123, "boke"};
func(hh);

で呼び出すと、呼び出しのためだけにstruct hoge hhを宣言するのが無駄なので、

func({123, "boke"});
みたいな形で、引数を即値にして一発で呼び出したいんですが。

350:名無しさん@お腹いっぱい。
09/02/05 22:22:28
>>349
たぶんC99限定だけど、複合リテラル
func((struct hoge){123, "boke"});


351:名無しさん@お腹いっぱい。
09/02/05 22:36:02
>>350
ありがとうございます。(struct hoge)を頭につけるだけで良かったんですね。
ちなみに、実体渡しじゃなくて、普通のポインタ渡しの場合でも、

func(&(struct hoge){123, "boke"});
で行けることを確認しました。

352:名無しさん@お腹いっぱい。
09/02/06 08:18:47
えっと自分でなんちゃってダウンローダを作っていて、いくつかの Unix 上で
(いまんとこ Linux と Mac OS X)で同じコードを使いたいと思ってます。
で、整数型の移植性がちょっと気になってます。

4GB以上のファイルを扱うために32bitより大きい整数でファイルの大きさを表現しない
といけないのですが、これってどんな型を使うのが正解ですかね?
必要なのは 1) 4GB以上のサイズを表現可能(http とかにファイルサイズを埋め込む)
2) printfとかで簡単に表示可能 です。

とりあえず off_t かな? と思ったんですが、ビット数とかよくわからないし、printfの指定も
よくわからないし、もしかしてとりあず long long にでもした方が楽なのかなあ、とか...

353:名無しさん@お腹いっぱい。
09/02/06 08:31:56
もちろんoff_t
URLリンク(www.suse.de)

これも参考になる。
URLリンク(jp.sun.com)

Macは知らない。

354:名無しさん@お腹いっぱい。
09/02/06 09:05:26
便乗質問ですが、
off_t を printf する時、書式指定はどうすればいいの?
off_tは、64bitの場合も32bitの場合もあって、OSによって違うけど、
ソースは共通にしたいという場合の話です。

355:名無しさん@お腹いっぱい。
09/02/06 09:36:01
>>354
書式は固定して、32bitの場合でも(long long)にキャストして表示。

356:名無しさん@お腹いっぱい。
09/02/06 09:42:02
URLリンク(jp.sun.com)

357:名無しさん@お腹いっぱい。
09/02/27 18:41:03
はて? 何が悪い?

$ cat file1.c
char s[] = "hoge\n";

$ cat file2.c
extern char *s;
int main(){printf(s);}

$ gcc file1.c file2.c

$ ./a.out
Segmentation fault

358:名無しさん@お腹いっぱい。
09/02/27 18:59:12
あたりまえだ。

$ cat file2.c
extern char s[];
int main(){printf(s);}

359:名無しさん@お腹いっぱい。
09/02/27 19:00:51
file1 では、s という名前の箱には、直接 char[] が入っている。
file2 では、s という名前の箱には、char を指すポインタが入っている、と宣言している。

ポインタと配列は混同してはいけない。
「エキスパートCプログラミング」の4章を嫁

360:名無しさん@お腹いっぱい。
09/02/27 19:00:54
>>357
C FAQ一読しとけ
URLリンク(www.kouno.jp)

361:名無しさん@お腹いっぱい。
09/02/27 19:06:18
じゃあなんでこれは動くんだよ

func(char *s){printf(s);}
int main(){char s[] = "hoge\n"; func(s);}

362:名無しさん@お腹いっぱい。
09/02/27 19:08:05
>>357
main()で、int宣言してるのに値を帰してないからじゃないの?
未定義の値が帰ってSegmentation faulするのでは?

363:名無しさん@お腹いっぱい。
09/02/27 19:26:00
>>361
いいから>>360を読め。
>>362
釣れるかい?

364:名無しさん@お腹いっぱい。
09/02/27 19:27:42
ていうか>>360内の
URLリンク(www.kouno.jp)
一番最初に出てる。

365:名無しさん@お腹いっぱい。
09/02/27 19:40:51
>>362
return(1)を足したら動きました。返り値は無視できませんね。勉強になりました。

366:名無しさん@お腹いっぱい。
09/02/27 20:05:19
配列の値がアドレスなのがいけないんだろう。
だからポインタと同じに見える。

367:名無しさん@お腹いっぱい。
09/02/27 20:07:58
× 配列の値 (それはchar)
○ 配列名の値

368:名無しさん@お腹いっぱい。
09/02/27 21:29:31
去年の秀逸な記事
URLリンク(s03.megalodon.jp)

369:名無しさん@お腹いっぱい。
09/02/28 01:27:00
>>368
おお、恐ろしい。恐ろしい。

370:名無しさん@お腹いっぱい。
09/02/28 12:17:44
ダメ初心者が初心者に教えてるのか…
> int main( void ) {
> int *n;
> *n = 5; /* ポインタ変数nに値5を代入 */

371:名無しさん@お腹いっぱい。
09/02/28 13:31:28
コード例だけ見ると typoっぽいけど、地の説明文からして
どうもポインタを勘違いして理解してるっぽい。
この沖林正紀って人は、なんでこの程度の知識で原稿書いたんだろう
初心者レベルの駄文より、嘘を教える方が性質が悪い。

372:名無しさん@お腹いっぱい。
09/02/28 13:50:40
>>370は初心者が陥りやすい間違いなので、ポインタの解説記事ならば間違えてはいけない個所。

記事の題名が「C/C++のポインタの機能--参照渡しのような処理」なので、JavaやLLから入って
来た人なのだろう。参照渡しでは初期化は不要だからね。

傍証
URLリンク(bookweb.kinokuniya.co.jp)懼ィ�%B3%8BI/list.html

373:名無しさん@お腹いっぱい。
09/02/28 14:27:55
参照渡しでも値渡しでも、callee は初期化不要では?

374:名無しさん@お腹いっぱい。
09/02/28 17:53:21
>>373
372は、参照渡しということはcalleeの話だから初期化は不要と言ってるのであって、
参照渡し以外で呼び出されたcalleeが初期化が必要とは一言も言ってないよ。

375:名無しさん@お腹いっぱい。
09/02/28 19:28:41
glib-2.0のgstringってCで使う場合使い勝手とか負荷とかどんなもんなんでしょう
ポインタ配列とかリストとかもあるんなら使いたいのだけれど
仕様が微妙なのでばきばき使っている人の使用感が聞きたい


376:名無しさん@お腹いっぱい。
09/03/01 06:43:15
以下をコンパイルしたのですが何も表示されません。
どうしてですか?

#include <iostream>

class H{public:H(){std::cout<<"hoge\n";}};

int main(){H h();}

377:名無しさん@お腹いっぱい。
09/03/01 08:19:51
関数の宣言だから

378:名無しさん@お腹いっぱい。
09/03/01 08:55:08
>>376
iostream.h じゃないの?
ヘッダーの拡張子 .h がなくて正常コンパイルできてないに1票。

379:名無しさん@お腹いっぱい。
09/03/01 09:07:01
>>376
"\n" なんて使えたっけ? << std::endl でしょ?
改行が出力されず、行バッファがフラッシュされなかったから
表示されていないように思っただけでは?

380:名無しさん@お腹いっぱい。
09/03/01 09:13:46
>>378-379
だから、「関数の宣言だ」と言ってるだろ。
int main() {
 int printf(...);
}
と書いてあるのと同じだよ。

381:名無しさん@お腹いっぱい。
09/03/01 09:15:46
>>380
もちろん、main()関数は宣言してます。そういう問題じゃないでしょw

382:名無しさん@お腹いっぱい。
09/03/01 09:34:33
おまえ、本当にバカだな。
printf()関数の宣言をしているのが見えないのか。

ホント、初心者の知ったかぶりって迷惑だよな。

383:名無しさん@お腹いっぱい。
09/03/01 09:36:10
>>382
ワーニングを無視すれば printf() は宣言なしでもつかえますよ。
あと、質問はprintf()じゃないしw

384:名無しさん@お腹いっぱい。
09/03/01 09:36:34
Hを返す引数の無い関数h()をmainの内部で宣言してる、と言われてるのに
知ったか初心者の癖に理解力ゼロだから困る。

385:376
09/03/01 09:38:23
>>378-379
.h付けて、endlに直したら表示が出ました。
ありがとうございました。

386:名無しさん@お腹いっぱい。
09/03/01 09:38:31
頭悪すぎだね。

387:名無しさん@お腹いっぱい。
09/03/01 09:41:43
>>383
あなたC++って言語、知ってる?

388:名無しさん@お腹いっぱい。
09/03/01 09:44:01
どこぞの独自拡張拡大解釈コンパイラしか知りません

389:名無しさん@お腹いっぱい。
09/03/01 09:47:40
>>387
printf()が出た時点で C++の可能性はゼロでしょ。
C++ではprintf()の使用は禁止だし。

390:名無しさん@お腹いっぱい。
09/03/01 09:59:28
ネタだよな?
まさかとは思うけど、本気で言ってるんじゃないよな?

これが初心者?
それとも老害?

391:名無しさん@お腹いっぱい。
09/03/01 10:00:33
>>389
幾らなんでも、それじゃ釣れないだろ。

392:名無しさん@お腹いっぱい。
09/03/01 10:04:56
main()がint型でありながら戻り値が省略可能な時点で、C++確定ですけど。

393:名無しさん@お腹いっぱい。
09/03/01 10:09:06
>>392
つC99

394:名無しさん@お腹いっぱい。
09/03/01 10:13:41
>>392
main()に限らず、何のint関数でも戻り値は省略可能。
ワーニングを無視するなら。

395:名無しさん@お腹いっぱい。
09/03/01 10:21:07
>>394
えーとね、main()は警告なしで省略可能なんだよ。
言語仕様として決まってるから。

もちろんあなたはは知らなかったでしょうけどね。
あ、もちろんprintf()も言語(のライブラリ)に含まれてますよ。
当然ながら、宣言なしで使うことは出来ませんがね。

396:名無しさん@お腹いっぱい。
09/03/01 10:22:48
>>395
つC89

397:名無しさん@お腹いっぱい。
09/03/01 10:23:30
警告をワーニングって言うのもちょっと恥ずかしい。
別にウォーニングと言えってことじゃないけどね。
単に「警告」で済むんだから。

ま、恥はいくつかいても恥で一緒だけどね。

398:名無しさん@お腹いっぱい。
09/03/01 10:28:04
>>396
つ 話の流れ
つ 空気

>>394
別にintに限りませんけど?
C(でかつ警告を無視する)なら。

399:名無しさん@お腹いっぱい。
09/03/01 10:32:21
そもそも>>376でclassが使われていて明らかにC++の話なのに
何故か「printfが使われてるからC++の可能性はゼロ」となって
Cでの話にすり替えられちゃってるんだよな。
不思議。

400:名無しさん@お腹いっぱい。
09/03/01 10:38:02
>>395
printf()は宣言なしで使えるよ。
実際にコンパイルしてみればわかるよ。
即席で書き捨てソースを書く時によくやる。

宣言なしでは使えないのはputs()とかputchar()とか。

401:名無しさん@お腹いっぱい。
09/03/01 10:44:48
>>395
仕様としてそう決まっていようが、現実はそうじゃない。

$ echo 'main(){}' | gcc -xc -; ./a.out; echo $?
148
$ echo 'main(){}' | gcc -xc -; ./a.out; echo $?
84
$ echo 'main(){}' | gcc -xc -; ./a.out; echo $?
101

毎回未定義。

402:名無しさん@お腹いっぱい。
09/03/01 10:44:57
>>400
つかえましたよ。
int main()
{
puts("xxx");
}
つーか、linkとごっちゃになってね。


403:名無しさん@お腹いっぱい。
09/03/01 10:49:17
>>402
>>395 に言ってくれ。

404:名無しさん@お腹いっぱい。
09/03/01 10:51:45
>>401
↓これじゃない
int main()

return 0; の話だろ

↓こっちは省略禁止
int main()




405:400
09/03/01 10:57:24
ああ、ごめん。
>>395 は論外としてputs云々が気になったので....
でだ。

ばかも ん。
昔のcompilerはなぁ、昔のcompilerはなぁ、
まともなwarning吐かないので、lint使ってたんだぞぉ。


406:名無しさん@お腹いっぱい。
09/03/01 10:57:31
>>400
だから、話の流れ的に「C++では」なの(>>395>>394>>392)。
C++では「宣言の無い関数は呼び出せない」の。
某コンパイラを除いてね。

407:名無しさん@お腹いっぱい。
09/03/01 11:00:40
>>401
あなたが省略してるのは「戻り値」ではなく「戻り値の型」。
話の流れとは全然関係ないから。

CでもC++でも
f() { return 0; }
という「戻り値の型の省略」は完全に合法ですから。
もちろんintと仮定されます。
そして、何もreturnしない場合、まっとうなコンパイラなら警告が出ます。

408:名無しさん@お腹いっぱい。
09/03/01 11:11:43
>>404 >>407
int付けても同じだよw そこが論点じゃないしww

$ echo 'int main(){}' | gcc -xc -; ./a.out; echo $?
41
$ echo 'int main(){}' | gcc -xc -; ./a.out; echo $?
116
$ echo 'int main(){}' | gcc -xc -; ./a.out; echo $?
32

毎回未定義。

409:名無しさん@お腹いっぱい。
09/03/01 11:12:13
>>395がCの話だと思ってる人って
わざわざ「printfが言語仕様に含まれる」と触れてる事を疑問に思わないのかな。
少し前に>>389があるのに。

410:名無しさん@お腹いっぱい。
09/03/01 11:19:51
>>408
>>406>>393を無視して、何故わざわざ「省略可能なことが言語仕様で保証されていないC89」でコンパイルするわけ?

411:名無しさん@お腹いっぱい。
09/03/01 11:25:23
「C++では言語仕様で保証されている、だからC++のコードだ」という話(それが妥当かはともかく)なのに
わざわざ「言語仕様で保証されてない言語(C89)」での結果を何度も貼りつけて何がしたいのかな。

412:名無しさん@お腹いっぱい。
09/03/01 11:26:39
あ、違った。
「言語仕様で「不定」となることが決まっている言語」だな。

413:名無しさん@お腹いっぱい。
09/03/01 11:30:14
>>404 の書き方では、「intさえ付ければ戻り値は固定される」と
言ってるように見える。

>>408 はそれに対する反論かと。

414:名無しさん@お腹いっぱい。
09/03/01 11:32:03
>>404
で言ってるのは
>>401に対して仕様で省略が認められてるのはreturnの方だけだよということだろう



415:名無しさん@お腹いっぱい。
09/03/01 11:33:39
>>414
でも結局省略したら値が不定んなったんだから省略できないじゃんw

416:名無しさん@お腹いっぱい。
09/03/01 11:36:35
>>415
だからC99規格対応なら、省略できて
C89規格ではそうではないって話だろ

417:名無しさん@お腹いっぱい。
09/03/01 11:39:25
>>416
結局省略できないじゃんw

418:名無しさん@お腹いっぱい。
09/03/01 11:45:48
省略できる言語の話をしてるんだろ?
何で別の言語の話をする?

419:名無しさん@お腹いっぱい。
09/03/01 11:48:28
省略できるって主張してる奴は、
「仕様上は省略できるはずです」って言って、
不定値を返すままのソフトを納品すればいいさ。

420:名無しさん@お腹いっぱい。
09/03/01 11:56:21
>>419
実装がとにかく正しいとか言って、コンパイラ依存のプログラムでも作ってろ

421:名無しさん@お腹いっぱい。
09/03/01 11:59:15
だったらせめて -xc をやめて
-xc++ や -std=c99 をつけた結果を貼れよ。
C89で保証されてないことなんか、知らない奴殆ど居ないんだから。

>>376からの流れなのに>>380がC++の話じゃないと思い込むバカは居るかもしれないけど。

422:名無しさん@お腹いっぱい。
09/03/01 12:02:08
>>419
どこに、「C89で省略できる」って主張してる奴がいる?


あ、いるのかな。
戻り値が保証されてるとは誰も書いていない、ってだけで。

423:名無しさん@お腹いっぱい。
09/03/01 12:12:12
×戻り値が保証されてるとは誰も書いていない
○戻り値が保証されると脳内で勝手に決め付けて特定の実装の結果を張り続けるバカもいる

424:名無しさん@お腹いっぱい。
09/03/02 10:17:57
linuxだとsearch.hのハッシュがやけに遅いのでGhashTableのが性能いらしいんだけど
FreeBSDの場合ハッシュの実装をするのにGhashTableとsearch.hと
どっちのがおすすめ?

425:名無しさん@お腹いっぱい。
09/03/02 12:38:43
ほとんどの人には不要だと思うけど、一応張っとく。
C++とC98は、main関数は暗黙のreturn 0。C89とその前はそうではなかった。

$ echo 'int main(){}' | gcc -std=c99 -xc - && ./a.out; echo $?
0
$ echo 'main(){}' | gcc -std=c99 -xc - && ./a.out; echo $?
<stdin>:1: 警告: return type defaults to ‘int’
0

$ echo 'int main(){}' | gcc -Wall -std=c++98 -xc++ - && ./a.out; echo $?
0
$ echo 'main(){}' | gcc -Wall -std=c++98 -xc++ - && ./a.out; echo $?
<stdin>:1: 警告: ISO C++ forbids declaration of ‘main’ with no type
0 # 禁止されてるけどエラーにならない

$ echo 'int main(){}' | gcc -Wall -std=c89 -xc - && ./a.out; echo $?
<stdin>: In function ‘main’:
<stdin>:1: 警告: control reaches end of non-void function
196


426:名無しさん@お腹いっぱい。
09/03/02 12:48:53
>>424
基本どっちもクヌース本のアルゴリズム。

427:名無しさん@お腹いっぱい。
09/03/02 12:52:43
C98という新規格まで登場したか。

428:名無しさん@お腹いっぱい。
09/03/02 13:32:40
>>425
おまえがC++とCごっちゃになってどうする

429:名無しさん@お腹いっぱい。
09/03/03 09:27:07
Cのコード中でディレクトリの内容を比較するのはどうしたらいいか悩んでいます。

動作的には "diff -r dirA dirB" を実行した場合の結果と同じ処理をしたいのですが、
毎回 diff コマンドを呼ぶオーバーヘッドを避け、出来ればCのコードで実現したいと
思ってます。どうすべきでしょう?

1. UNIX の API にこの目的にふさわしいものがあり(何という名前?)、それを使う
2. 違うファイルかディレクトリに遭遇するまで地道に両者のディレクトリを辿るような
コードを自分で書く
3. diff のソースコードを入手し、自分のプログラムにリンクして使う
4. その他

430:名無しさん@お腹いっぱい。
09/03/03 09:57:03
お前の書くコードがdiffよりオーバーヘッドが少ないわけがない。

431:名無しさん@お腹いっぱい。
09/03/03 10:09:27
>>429
普通のdiffコマンドは高速でないアルゴリズム( O(ND) )を使ってるから、
gitとかpythonのライブラリに使われてるやつのが速い
ってわけで、速度を追い求めるなら差分取得のアルゴリズムについて調べてがんばれ

432:名無しさん@お腹いっぱい。
09/03/03 10:12:30
いや高速でないってこたないんですよ、それより速いのがあるだけで

433:429
09/03/03 10:29:38
あー書き方が悪かったかな。
もし diff ということで LCS とかそこらへんに脊髄反射されてたらごめんなさい。
自分が知りたいのは dirA と dirB の内容が違うか同じかだけなんです。

この場合むしろディレクトリの階層に効率よくアクセスできることが重要なんじゃないかと
思ったんですが、違います? fts とかですかね?
それにファイルを処理するようなソフトならありがちな処理のような気がするので、
どこかに適切なコードのサンプルがあればと思って...

434:名無しさん@お腹いっぱい。
09/03/03 10:37:16
>>433
> 自分が知りたいのは dirA と dirB の内容が違うか同じかだけなんです。

内容の比較は必要か
タイムスタンプの比較だけでいいか
同じファイル名が存在するだけでいいのか

rsync --dry-runの出力結果を使うとか。

435:429
09/03/03 10:50:52
>>434
「同じ」とはディレクトリ構造が同じで、その中に存在するファイルの名前&内容が同じ
という積もりです。
タイムスタンプは比較しません。

>rsync --dry-runの出力結果を使うとか。

はい、確かにそれも速そうですが、自分のプログラムだと比較的浅いディレクトリに
対してそれを何度も呼ぶことになりそうなので、C の何かの API で書いた方がいいのか
なあと。

ある意味 rsync みたいなプログラムなんですが、syncするときにいろいろカスタムな
ロジックを入れたいので、コードを書いているといいますか....

436:名無しさん@お腹いっぱい。
09/03/03 11:32:23
内容比較がcmp -sレベルでいいなら、
readdir/lstatで自分で書けばいいんじゃない?
質問せずに書けば、今頃書き終わっている頃かと。

437:名無しさん@お腹いっぱい。
09/03/03 13:31:30
ファイルとディレクトリの equality は適当に定義出来
るとして、↓みたいになるかな。

for (File src = each of srcDir) {
        File dst = dstDir.Find(src);
        if (dst == null) {
        // src にしかない
        } else if (src != dst) {
        // 違う
        }
}
for (File dst = rest of dstDir) {
        // dst にしかない
}

each of …は都度 readdir して、Find は保持してるプー
ルから探して、無ければ見つかるまで readdir、してプー
ルに入れていく感じ。見つかったらプールから削除して
おいて rest of …でそれを得る。

438:名無しさん@お腹いっぱい。
09/03/03 14:07:34
両方コレクションにいれて、ソートして、
先頭二つ、計四つを比較しながら取り出せばいい。
四つになるのはどちらが欠けているかわからないから。
どれも違う場合、四つの中で小さいの二つを捨てればいい。

AB
AB

AB
BC

BC
AB
-
AB
CD

AC
BD

439:名無しさん@お腹いっぱい。
09/03/03 14:16:00
>>438
ファイル/ディレクトリの equality と同様に順序付け
も定義出来るなら(ソートするからには出来るはずだ)、
先読みする必要はない。マージソートの要領だ。

440:名無しさん@お腹いっぱい。
09/03/12 19:41:22
dirp=opendir(".");
printf("1 :%d;\n",telldir(dirp));
printf("2 :%d;\n",telldir(dirp));
printf("3 :%d;\n",telldir(dirp));
closedir(dirp);
とすると返す値は1,2,3とどんどんインクリメントしていくだけだし
seekdirは無反応rewinddirは巻き戻すばかりかtelldirをひとつ進めるだけ
readdirとかはちゃんとできているんだけれど
何か呪文とかいるのかダメダメな関数なのか情報please

441:名無しさん@お腹いっぱい。
09/03/12 19:51:28
>>440 OSはFreeBSDです。

442:名無しさん@お腹いっぱい。
09/03/12 20:15:55
たぶん実装がおかしいんだろう。MacOS Xも同様らしい。
URLリンク(idm.s9.xrea.com)

dirent読むのにtelldirやseekdir使うようなやつはいないから放置されてると想像。

443:名無しさん@お腹いっぱい。
09/03/12 20:24:17
追加。このへん関係あるかも。
URLリンク(www.freebsd.org)

444:名無しさん@お腹いっぱい。
09/03/12 20:32:49
>>440です。rewinddirの記述は間違っていました。
rewinddirとreaddirだけが使えます。

で調べたらscandirというのがありました。
mallocしてくれて配列に入れて関数指定すればsortもしてくれるようなので
コールバックもsort関数に入れます。
>>435もscandir+lstatでいいのでは?

しかしひどすぎるなtelldir+seekdir
ファイルの多いディレクトリーでちょろちょろよむもん作りたかったんだけど
一気読みが基本ですか?

445:名無しさん@お腹いっぱい。
09/03/12 20:38:50
とりあえずコールバック抜きのアルファソートやってみた。
c = scandir(dirname, &namelist, NULL, alphasort);
if(c == -1) {
puts("not opendir");
return(1);
}
printf ("%d\n", c);
for (i = 0; i < c; ++i) {
printf ("%s\n", namelist[i]->d_name);
free(namelist[i]);
}
free(namelist);

opendirの苦労は一体....orz

446:名無しさん@お腹いっぱい。
09/03/12 20:40:17
>>435

opendir -> ディレクトリをファイルとして開く
readdir -> ディレクトリのエントリを一つ読み込む(ポインタ一個進む)
seekdir -> ディレクトリのエントリを x 番目にセットする
telldir -> 今いるエントリ位置を報告する

を組み合わせて, 双方のエントリを比較して
1. 対象物の inode が同じなら処理スキップ
2. 対象物が ディレクトリなら, 自分自身を再帰的に呼び出す
3. 対象物がファイルなら中身を比較
すればええんちゃう?


447:名無しさん@お腹いっぱい。
09/03/12 20:46:16
既に読んだエントリに戻って読み直すシチュエーションがわからん。

仮にtelldir/seekdirの動作がまともでも、
いちいち物理的にディレクトリ読みに行くような実装だったりしたら、
遅いし最中に誰かがいじらんとも限らんし、いいことなしでは?
キャッシュしてるんだとすれば一気読みと何も変わらんし。

というわけで、telldir/seekdirは価値なしなんじゃないかと。


448:名無しさん@お腹いっぱい。
09/03/12 21:00:32
>>447
再帰して必要物がなくって、バックトラックするときに
変わってしまった状態を元に戻すために必要

recur_dir(...
here = telldir(...
if (このエントリが dir && 比較対象と違う)
if (recur_dir(...) == succeed)
return なんとか
ここに戻ってきた場合何がどうなってるか保証できない
seekdir(here)
続きの処理


449:名無しさん@お腹いっぱい。
09/03/12 21:56:26
何がどうなってるか保証できない状態なら
telldirしたところにseekdirしても保証できないだろう

450:名無しさん@お腹いっぱい。
09/03/15 11:44:20
ストリームとしてファイルリストをチェックしていくならseekとかは必須だと思うけれど
telldirもseekdirも機能しないんだから必要でも存在しない事実をどうする。

一旦readdirだかscandirでざっくりと読み込んで
それに対して操作するしか方法が無いのが現実。

バックアップとかで完全一致を目指す場合
「ほぼあっている」前提ならば結局ファイル自体の完全マッチをするしかないと思うが
事前にMD5とかSHA1とかとったリストをディレクトリーに入れとけばそれで済む気はする。

451:名無しさん@お腹いっぱい。
09/03/17 11:41:43
なんだ。ftsとかftwというファイル階層を歩くライブラリーが標準であるんじゃないか。
少なくともperlの「find::file」と同じ事はftwだけでできた。

最低の作り方でもftwのコールバックで配列を構築すればいいわけだし
scandirとか使ってバカみたいだった。

何気にファイルユーティリティが固まってきたよ。


452:名無しさん@お腹いっぱい。
09/03/17 14:33:22
opendir/readdir/closedirは、
fts, ftw辺りを書く人のためのシステムコールなんだよね。
まあ自分で書くのも悪くないけど、
scandir/telldirは使わないことをお勧めする。

>>448に書いてあるようなことは、
"concurrent data structure"と言うべきものだけど、
(Javaのiteratorのremove()のような)
UNIXのシステムコールは、"concurrent directory"を
直接的にはサポートしない。

昔、間接的にサポートするために、
update notifyが上がるUNIXenを見たことがあるが、
何だったか忘れてしまった…

453:名無しさん@お腹いっぱい。
09/03/17 15:25:32
変な用語持ち出して論理に飛躍のあること言い出す輩が出てきたな

454:名無しさん@お腹いっぱい。
09/03/17 16:33:31
用語が理解できないのを論理に飛躍があることにする輩が出てきたな

455:名無しさん@お腹いっぱい。
09/03/25 11:19:17
>>452
> opendir/readdir/closedirは、
> fts, ftw辺りを書く人のためのシステムコールなんだよね。

ちゃうやろ…と思って見てみたけど、ffs(ftw) って
"." を open() してあれこれしてるだけだよ。

URLリンク(www.freebsd.org)


456:名無しさん@お腹いっぱい。
09/03/25 11:42:34
>>455
違う。
open(2)は後から戻る時にfchdir(2)するため。
パスで辿ると別のところに行く可能性あるから。

457:名無しさん@お腹いっぱい。
09/03/26 19:54:47
>>456 少なくともFreeBSDでftsもftwもchdirのオプションをつけようがつけまいが起動時のディレクトリーがカレントだった。
つまり子ディレクトリーの階層に移っていても「getenv("PWD")」の返り値は
スタートの場所
コールバック書くときにchdirされていると思って組むとはまる。
素直にpathなりを使う。
詳細システムコールの実装はともかくファイルリストの取得も含めて
ファイルサイズとか必要なんだったらftwかftsを使えばかなり楽なわけで
組みもしないで妄言はいていないでとりあえず組んで自分なりのベストをみっければいいんじゃないかと思う。
ftwはソートされないので一様に処理する場合以外は使えないかなと思ったけれど
コード量がとにかく少ない


458:名無しさん@お腹いっぱい。
09/03/26 19:56:43
とにかくディレクトリー内のリストが欲しいならばftwでコールバックで配列に書き込む方法
ツリー取得したいならばftsが良い。
ftwの後腐れのなさは結構魅力
別の選択肢としてpopenでls -lRの返り値もらうという手もある。
perlなら「``」の返り値もらうだけだな。パースは適当にやってくれ

459:名無しさん@お腹いっぱい。
09/03/27 09:41:21
>>455
そのソースを読めばopendir/readdirしていることが分かると思うが?
軽く検索しただけでいい加減なことを言わない方がいい。
NFSで動かないfts(3)を実装するわけがない。


460:名無しさん@お腹いっぱい。
09/03/28 16:53:22
>>459は「実際に組んでいない」んだから机上の空論はほどほどにね、

>>455のは客観的なソース評価であるし間違ってはいないし
掲示板でいい加減な事をいっても何の問題もない

NFSなんて使わないでしらないけれどtelldir,seekdirすら動かないんだから
ftsがNFSで動かないくらい全然あってもおかしくない

461:名無しさん@お腹いっぱい。
09/03/28 18:09:18
>>460
> >>455のは客観的なソース評価であるし間違ってはいないし
> 掲示板でいい加減な事をいっても何の問題もない

( ゚д゚)ポカーン


462:455
09/03/28 22:14:14
ちゃうやろと思ったのは telldir/seekdir に関してだよ。
452 が opendir/readdir/closedir にしか言及してないってことに
気付いて無かった俺がアホなだけ。

463: ◆RubyFahc/I
09/03/31 15:55:27
rubyおたく向けのトリップ創りました。

RubyFahc/I : #NcM--Cセ{
Ruby.qKt3Q : #%C/Y:gmk
Ruby3r65m. : #h6d|TbE」
RubyWViHDk : #:jV|^?N~
Rubyi8CaTg : #jDt1G4`:
RubymzWnxQ : #!N{o6VヲJ
Rubyfo02Gg : #ヲYJ)ffn$
Rubyu9svnE : #+T-GT.Ti
RubyypieqU : #+,K:ヲ%v[
RubyIoAFuU : #?)V0M]c`
RubyNL3l2E : #C^?}8sヲq
RubyredCpo : #JU@UkdMy
Rubybk3Pyo : #hU@fQm,_
RubyYQ3Jtk : #m\4A?2'e
Rubyvjyg76 : #XIQ{N$J3
RubyS4Qmog : #/aKG.b\*
RubyPiJzfc : #_jq@zdZh
Ruby24.u4U : #l[Lz\Y)h
RubyVtS0bk : #pD'y$Zi\
Ruby4dt6ro : #「{Nv@f(0
RubymGCEfc : #9NXi[v|)
RubylUmOgY : #+(dK「@X{
RubypDsPgo : #HfLO0Nr8
RubyRlH2oc : #/2)k|Gpu
RubyYbNPnc : #シzU2.ヲ.L
RubyyRsYeU : #/Spddm+A
RubydSrMqw : #mx+9{[)c
RubyiMB9bQ : #KMlaIaOr
RubyOerZfE : #11J\EXK8

464: ◆Ruby.c34.Q
09/03/31 15:57:16
Rubyl/JuN. : #{^3l?jM@
RubyMyu4iA : #g{@Sセ,'5
RubysBAU/s : #slubZ7サd
RubyeT6Qio : #,)gAzFEX
RubyDyS/e. : #サAbV1lG/
RubyRfMLNM : #Wシ」w[8}h
Rubytc3JHQ : #Z=o\ib[サ
Ruby1lE7L6 : #h1シ{A-kj
RubyuUag0Y : #gヲ8!@W$n
RubyG6B8e6 : #0+7サ=5VH
RubyGguz1Q : #-g5i9\K8
RubyqzNGOo : #~t(mCuXQ
RubycQw0oM : #]%}-N(Me
RubynWWUBo : #PrU?「シJJ
Ruby.c34.Q : #IS+zヲABセ
RubyDdsChM : #qVKZI+{=
RubyBu2YeQ : #B@[.Q-o2
RubyoIbx4o : #ヲ2:qwsJD
RubyaL3Nm. : #k\uS\tFe
RubyRGJW9Y : #9)`H%Pc+
RubyKHrqAU : #zrB_X@tC
RubydeGFDA : #6「31rNEI

465:名無しさん@お腹いっぱい。
09/04/03 03:46:26
UNIXとC++どっちがいいでしょうか?

466:名無しさん@お腹いっぱい。
09/04/03 04:00:32
MACがいいと思います

467:名無しさん@お腹いっぱい。
09/04/03 05:00:56
マクドってゆえや

468:名無しさん@お腹いっぱい。
09/04/03 18:34:28
取り敢えず今「ディレクトリ取得」スレ的な流れだと思うんだけど
NFSってみえないといけないの?あとサン婆
httpかftpとローカルデバイスだけあればいいという考えではだめ?


469:名無しさん@お腹いっぱい。
09/04/03 18:39:46
今時ディレクトリをread(2)出来るアホなUFS on UNIXは、
BSDくらいだと思うが、他にもあればリスト化希望。

470:名無しさん@お腹いっぱい。
09/04/03 20:57:02
プログラマーになりたい・・

作曲家になりたい・・・

フラッシュ職人になりたい・・

絵師になりたい・・



俺にできるだろうか?

471:名無しさん@お腹いっぱい。
09/04/03 21:05:01
なるだけならすぐなれる

472:名無しさん@お腹いっぱい。
09/04/03 21:14:23
「プログラムを組む」のと「プログラマーになる」のは違う

「適当な曲を作曲する」のと「作曲家になる」のは違う

(以下同)

よって、「なるだけ」でもすぐにはなれない

473:名無しさん@お腹いっぱい。
09/04/03 21:27:55
そうか・・

やはり必要なのはCですよね

474:名無しさん@お腹いっぱい。
09/04/03 21:29:10
プログラマになりたくてなるんじゃないなってしまう者がプログラマ
貧弱一般人がプログラマになろうとしてもここはUNIX界なので人工的に淘汰されるのが目に見えている

475:名無しさん@お腹いっぱい。
09/04/03 21:37:57
なってしまう・・とはどういうことかもう少し詳しく聞かしてほしい

476:名無しさん@お腹いっぱい。
09/04/03 21:41:10
ようするに、才能じゃね?

477:名無しさん@お腹いっぱい。
09/04/03 21:47:36
このプログラム腐ってやがる→仕方が無い、自分で直すか…
このプログラム良いんだけど、ちょっと機能が足りないな→仕方が無い、自分で直すか…
このプログラム良いな、どうやって実装してるんだろう→ソース読むか…
新人プログラマは頑張ってるんだけど、仕事ができねえ→仕方が無い、俺が実装するか…
どうも業務の効率が悪いな→一丁、便利スクリプト作ってやるか…

俺は↑こんな感じでプログラムを書く様になったけど、
>>474が言ってるのはまた別の事かな。

478:名無しさん@お腹いっぱい。
09/04/03 21:59:08
>>474
の言葉のせいで無理なような気がしてきた(´・ω・)

479:名無しさん@お腹いっぱい。
09/04/03 22:33:27
つまり、それほど、重く受け止めてしまうほどの意味深い言葉に聞こえたのです

480:名無しさん@お腹いっぱい。
09/04/04 10:45:18
>>474はブロントさんだろう。一級プログラマとして
一般人から見ると憧れの的

481:名無しさん@お腹いっぱい。
09/04/04 11:11:11
>>480
ブロントさん==一級プログラマ
????

482:名無しさん@お腹いっぱい。
09/04/04 11:14:06
>>477
お前、素質あるな。

483:名無しさん@お腹いっぱい。
09/04/04 12:31:19
>>477
ハッカー気質をお持ちだね。良いことだ。

484:名無しさん@お腹いっぱい。
09/04/05 21:54:37
初歩的な質問ですが、


みなさん童貞ですか?

485:名無しさん@お腹いっぱい。
09/04/05 22:20:56
いいえ、妖精です。


486:名無しさん@お腹いっぱい。
09/04/05 22:49:29
君もウィザードだろ?

487:名無しさん@お腹いっぱい。
09/04/05 23:06:39
Perlのモジュール WWW::Mixi でのログインを http ではなく https にして
安全にパスワードを送信するように改造するには何を使えばいいのでしょうか?
この辺をこういじってみたら?など詳しい方アドバイスを頂ければ幸いです。


488:名無しさん@お腹いっぱい。
09/04/05 23:28:16
いいえ、ワイザードです

489:名無しさん@お腹いっぱい。
09/04/06 12:47:12
41で童貞です

490:名無しさん@お腹いっぱい。
09/04/06 17:06:36
>>487 WWW::MixiはしらないけれどNet::SSLeayかCrypt::SSLeayが入っていれば
lwpでhttpsが使えるはずだから
今httpsが使えないとしたらどちらか入れて同じコードで試してみたら?

491:名無しさん@お腹いっぱい。
09/04/06 17:19:05
とりあえずFlashがやりたいならば
java +flex4 SDK
wine+Flashの適当なバージョン
flasm swfmillそしてエディターとxtermがあればかなりのことができる。
mtascだってつかえる。

CでcairoとSDLとffmpegを駆使すればFlash 用の絵描きツールも作れるよ

まぁとりあえずhtmlでアドベンチャー見たいなものを作る程度の技能がないとだめだね、
絵はローグとかつくーるじゃないけれどとりあえず借り物でもいいんじゃないの

492:名無しさん@お腹いっぱい。
09/04/09 01:40:40
プログラミングからは少し外れますが・・・

HogeHugaはキャメルケースって言いますが、hoge_hugaは何と言うのですか?

493:名無しさん@お腹いっぱい。
09/04/09 12:56:25
>>492
パスカル

494:名無しさん@お腹いっぱい。
09/04/11 16:28:13
>>492
snake case

495:名無しさん@お腹いっぱい。
09/04/24 07:19:05
underscore styleというのもどっかで見たような気がしなくもない

496:名無しさん@お腹いっぱい。
09/04/25 12:15:33
PF_UNIX/SOCK_DGRAMにデータを送る時、FreeBSDでは
送り元が無名になってしまい、受け取った側が
返答を送り返すことができない。(PF_INETだともちろんソースポートが付くが)
だから、間に合わせのファイル名をbindしてから送信する必要あり。
あとでunlinkしないと行けないし、美しくない。
Linuxだと、PF_UNIX/SOCK_DGRAMでも、bindしなくても
勝手に名前を割り当ててくれて、不要なソケットファイルも作成されないんだが、
そういうことはできないの?

497:名無しさん@お腹いっぱい。
09/05/02 13:06:49
C++のtemplateで、templateの展開先を限定することってできますか?

template <class T> void func(T arg) {
// argが HOGE型またはFOO型の場合の処理
}

template <class T> void func(T arg) {
// argが BOKE型またはHAGE型の場合の処理
}

みたいなことをやりたいのです。関数名は func()で同名にしたいのです。

たとえば、template <class T={HOGE,FOO}> みたいなことが実現できませんか?

498:名無しさん@お腹いっぱい。
09/05/02 13:57:48
>>497
template <class T> void funcHOGEFOO(T arg) {
// argが HOGE型またはFOO型の場合の処理
}

template <class T> void funcBOKEHAGE(T arg) {
// argが BOKE型またはHAGE型の場合の処理
}

void func(HOGE arg) { funcHOGEFOO(arg); }
void func(FOO arg) { funcHOGEFOO(arg); }
void func(BOKE arg) { funcBOKEHAGE(arg); }
void func(HAGE arg) { funcBOKEHAGE(arg); }

499:名無しさん@お腹いっぱい。
09/05/02 14:01:28
>>498
だから、そうは書きたくないので、
templateを使って奇麗にまとめる方法を質問してるんですが。。

他にわかる方お願いします


500:名無しさん@お腹いっぱい。
09/05/02 14:53:03
何が不満なのか言えよ。

どうしても template だけのコードにしたいんなら、 boost の enable_if に
is_same とか突っ込んで使えばいいかもしれない。

501:名無しさん@お腹いっぱい。
09/05/02 16:53:57
>>498 の方法では、func()の一方のargの型の種類が不定の時対応不能。

つまり、
片方の func() は argが HOGE型またはFOO型の場合
もう片方の func() は argが「HOGE型またはFOO型」以外の場合すべて

だったとしたらどうする?

502:名無しさん@お腹いっぱい。
09/05/02 17:06:02
>>501
template <class T> void funcHOGEFOO(T arg) {
// argが HOGE型またはFOO型の場合の処理
}

template <class T> void func(T arg) {
// argが「HOGE型またはFOO型」以外の場合すべて
}

template<> void func(HOGE arg) { funcHOGEFOO(arg); }
template<> void func(FOO arg) { funcHOGEFOO(arg); }

503:名無しさん@お腹いっぱい。
09/05/02 17:13:52
>>502
「HOGE型またはFOO型」というのが、2種類だけじゃなくて10種類くらいあったら
template本体以外に void func(HOGE arg) とかを全部列挙するのが
すごくダサイんですが。

あと、本来の関数名以外に funcHOGEFOO()という関数名をつけなければいけないのも
名前がぶつかるかも知れないし美しくない。

504:名無しさん@お腹いっぱい。
09/05/02 17:18:14
なんで人にコード書かせて後から条件増やして文句つけるの?
そういう遊びなの?
アホなの?

505:名無しさん@お腹いっぱい。
09/05/02 17:19:35
>>503
何がしたいのかわからんが、ごちゃごちゃ言わずにさっさと boost::enable_if で好きに片付けろよ。

506:名無しさん@お腹いっぱい。
09/05/02 17:21:22
アホなんだろ。

507:名無しさん@お腹いっぱい。
09/05/03 00:15:37
どうしてこんなことに

508:名無しさん@お腹いっぱい。
09/05/03 10:24:12
同じコードが、Cだとコンパイルできるけど、
C++だとエラーになる。

struct A { int i, j; };

void hoge()
{
struct A a = { .i = 123, .j = 456 };
}

構造体を初期化したいのだが、メンバーの順序を気にしなくていいように
メンバー名指定で初期化したい。

A a = {123, 456};
にすればC++でもOKになるけど、これだとメンバーの順序が変わった時困るから、
.i = や .j = の指定を入れたいのだが。

わかる方お願いします。

509:名無しさん@お腹いっぱい。
09/05/03 12:33:58
CでもC99じゃないとダメじゃないの?それ

510:名無しさん@お腹いっぱい。
09/05/03 13:03:34
C++だったら普通コンストラクタ

511:名無しさん@お腹いっぱい。
09/05/03 13:10:29
>>510
コンストラクタにしても、メンバの順序(コンストラクタの引数の順序)を考えなくて
いいように >>508 の要求を満たすことはできないのでは?

メンバの型が違えば方法はあるけど、型が同じならできないでしょ。

512:名無しさん@お腹いっぱい。
09/05/03 13:51:41
>>510
コンストラクタだと実行時に「代入」されるからプログラム的に無駄でしょ。
「代入」じゃなくて、静的データで初期化したい。
あるいはテーブルのようなconstデータを持ちたい場合、
コンストラクタじゃなくて「初期化宣言」したい。

513:名無しさん@お腹いっぱい。
09/05/03 14:37:22
>>512がオート変数の初期化を、「代入」以外の方法(静的データ?)で行う、
画期的に効率的な方法を開発したようです。

514:名無しさん@お腹いっぱい。
09/05/03 14:54:15
>>513
>>508 では確かに auto変数だが、
関数外に const static で持ちたい場合もあるしね。

そういう場合、struct member指定で順不同で初期化するのはどうするのかね?

やっぱ C++じゃ無理なのかい?

515:名無しさん@お腹いっぱい。
09/05/03 16:14:47
なんかさー、そこまでこだわるなら
struct A a;
a.i = 123;
a.j = 456;
でいいじゃんって感じ。
元々auto構造体変数のメンバ初期化自体邪道だったんだし。

516:名無しさん@お腹いっぱい。
09/05/03 16:23:57
>>515
すでに指摘されてるように、それだと「代入」。
質問は「初期化」の方法。

auto変数じゃなくて、staticの時、どうするよ?

517:名無しさん@お腹いっぱい。
09/05/03 16:30:14
C++の規格上出来ないんだから、どうしてもやりたいならC99で記述してリンクすればいい。

518:名無しさん@お腹いっぱい。
09/05/03 16:34:57
なんだ、できないのか。しょぼいな。

519:名無しさん@お腹いっぱい。
09/05/03 17:59:22
コンストラクタ的にしとかないとメンバ変数増えたときに困りそうだけど。

520:名無しさん@お腹いっぱい。
09/05/03 23:59:36
>>519
まあこんなしょうもないところにこだわる人にそんなことが理解できるはずもなく。

521:名無しさん@お腹いっぱい。
09/05/05 10:21:50
そういうエディタ内でのお遊びはム板でやればよろし。
>>517 >>520 で正解でてるからいうこた特に無いけれど
それ以前に
基本は「ある仕様を覚えろ」じゃないかと思う。
「書き方」にこだわりがあるなら
そのコーディングを無難にコンパイルできるマクロツール作ればいいまでのこと
テキストレベルの問題だ。

522:名無しさん@お腹いっぱい。
09/05/05 14:51:47
おいおい、途中から話の噛み合っていないバカ共が増えてるけど

元々の質問は、
「メンバの順序を気にしなくて良いように、メンバ名指定で初期化したい」
   例:struct A a = { .i = 123, .j = 456 };
なんだろ?
で、傲慢にも「同じコードをC++でも通るようにしたい」と…

はっきり言えば>>509>>517が全てで、この書き方だとC99でしか通らず
そのままではC++0x準拠のC++コンパイラですら通らないわけだが
何を勘違いしたのか、初期化と代入の区別もついていないバカ共とか
Designed Initializersの話してるのに、エディタ内でのお遊びとか言ってるバカが話をややこしくしてる
本当バカって救いようないな、分からないなら黙っていれば良いのに…

似たような疑問をもっていて、たまたまこのスレを訪れた人は、>>509>>517以外の
>>508からここまでのレスは、全くのゴミレスなので読み飛ばしてほしい

523:名無しさん@お腹いっぱい。
09/05/06 13:33:15
X Window Systemのプログラミングの参考になる書籍
で現在も通用するものってどんな者が有りますか?
具体的にはC言語からXlibなどをつかってツールキットを使わずに
プログラムを作成する方法を解説した書籍があればお教えください。
tclやgtkやqtの経験は有るのですが、ちょっとしたプログラムを
作るのにあまり重たくしたくないのでC言語で直接利用したく思います。

524:名無しさん@お腹いっぱい。
09/05/07 10:40:39
>>523 書籍はしらないけれど
URLリンク(xjman.dsl.gr.jp)
URLリンク(www-yano.is.tokushima-u.ac.jp)
あとりを参考にしてみては?あとめぼしいportsのソースが参考になる。
ただxlibとSDLと使用メモリとか大してかわらんよ。
描画面も考えると
xlib→cairo→pango
ないしは
SDL→cairo→pango
とやっていくと軽くて学習効率が高く見栄えのする結果が得られると思う。
それと「コマンドとして呼び出して結果をもらう」とか
「perlやshを呼び出す」事も選択肢に入れるとコードと使用リソースが小さくできる。

525:名無しさん@お腹いっぱい。
09/05/07 10:46:27
>>524でcairoを出しているのはxlibだときれいなテキストが書きにくいので
freetypeを叩くより楽だからの意味合いが強い。

526:名無しさん@お腹いっぱい。
09/05/07 17:08:06
>>524-525
ありがとう御座います。
がんばります。SDLはいろんなOSで使えるようですね。
いろいろ勉強してみようと思います。


527:名無しさん@お腹いっぱい。
09/06/17 09:35:24
>>523
亀レスだがそういう解説書なら
Xアプリケーション・プログラミング1 Xlib編

しかし書籍の方が現在では流通していないかも。
どこかの図書館にはあるだろうからその場合は最寄りの図書館で取り寄せてもらって。

528:名無しさん@お腹いっぱい。
09/06/19 17:16:58
下図のように自己交差しているリージョンを、
┏━┓
┃  ┃
┗━╋━┓
   ┃  ┃
   ┗━┛
交点で個別のリージョンに分けたいんですけど、
┏━┓
┃  ┃
┗━┛┏━┓
     ┃  ┃
     ┗━┛
簡便な方法ってないものでしょうか。よろしくお願いします。

529:名無しさん@お腹いっぱい。
09/06/19 17:23:20
すみません、スレ違だったようです。取り下げます。

530:名無しさん@お腹いっぱい。
09/07/13 15:10:34
# ping -c 1 -t 10 www.yahoo.co.jp
って実行すれば以下のような結果が表示されると思うのだが

PING www.yahoo.co.jp (124.83.139.192) 56(84) bytes of data.
64 bytes from f1.top.vip.ogk.yahoo.co.jp (124.83.139.192): icmp_seq=1 ttl=57 time=9.06 ms

--- www.yahoo.co.jp ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 9.068/9.068/9.068/0.000 ms

平均値だけを出力させることってできますか?
#ping -c 1 -t 10 www.yahoo.co.jp
9.068

って感じにです。

531:名無しさん@お腹いっぱい。
09/07/13 15:11:25
すみません、スレ違だったようです。取り下げます。

532:名無しさん@お腹いっぱい。
09/07/13 15:13:06
>>531
勝手に取り下げないで下さい

533:名無しさん@お腹いっぱい。
09/07/13 17:19:19
>>530
えっと、そういう機能を持った pingコマンドの別種を自分でプログラムしたい、
って質問だよな?
pingのようにICMPを送受信するには、
SOCK_RAWを使ったソケットプログラムが必要だが、
その辺は理解してるのか?

534:名無しさん@お腹いっぱい。
09/07/13 17:26:55
単にパイプで適当なワンライナーにつなげば済む程度の話じゃね?

535:名無しさん@お腹いっぱい。
09/07/13 17:32:39
>>534
それだとプログラミングじゃないからやっぱりスレ違い。取り下げなければならない。

536:名無しさん@お腹いっぱい。
09/07/13 17:58:32
>>533
muninで出力結果をグラフにしたいだけです

537:名無しさん@お腹いっぱい。
09/07/13 18:01:43
>>536
じゃあ、Xのプログラムも必要だな。
ツールキットは何を使う予定?

538:名無しさん@お腹いっぱい。
09/07/13 18:37:33
>>537
必要ねぇだろ?嘘教えるなよww

539:名無しさん@お腹いっぱい。
09/07/13 18:40:19
ここはプログラミング質問すれだよ。
muninの出力みたいな表示を行なうプログラムを自作したいんだろ?
pingのソースを参考にソケットプログラムとXのプログラムが必要だな。

540:名無しさん@お腹いっぱい。
09/07/16 13:14:14
グラフィックスにXのプログラムはいらないな。
グラフというのが「画像」であるならばcairoを使うのが定番
cairoで作ったコンテキストはファイルとして保存できる他
GDK,xlibのpixbuf、SDLみたいなメモリコンテキストから簡単に扱える。
ImageMagickもいいんだけれどcairoのが良いと思うね、

コマンドプロンプトのコントロールもpipe使ったりsytem使ったりで使うのは有りだから
無理に実装せずpopenとかで呼ぶのも有りだし
perlやpythonでの実装という選択肢もある。

で>530 の場合は無理にICMPの使い方をマスターしないで
perlの「``」かCのpopenでpingを使ってデータを取って
ソートなり平均値を出すという部分をまず作ることが大事なんじゃないかな。

ping部分を作りたかったら別で作ればいいさ。

541:名無しさん@お腹いっぱい。
09/07/16 13:34:45
>>540
perlを使うと「スクリプティング」
(シェルスクリプトも同様)

ここは「プログラミング」
よって、スレ違い。

542:名無しさん@お腹いっぱい。
09/07/16 19:03:06
>>541
スレ違いじゃないと思うけど。
別に何使ったっていいじゃん、こだわること無い。

543:名無しさん@お腹いっぱい。
09/07/17 02:10:39
アクションゲームプログラミングって本を参考に
プログラミングしようと思ってるんですけど
ひとつ疑問が、
Directx SDKのバージョンが違うんですけど
最新版でも問題はありませんか?

544:名無しさん@お腹いっぱい。
09/07/17 08:13:33
この板では回答は得られません

545:名無しさん@お腹いっぱい。
09/07/18 14:10:53
まぁそう言わずに

>>543
君には無理

546:名無しさん@お腹いっぱい。
09/07/19 21:14:09
>>541 プログラムの意味分かってないね、


547:名無しさん@お腹いっぱい。
09/07/19 21:16:18
>>543 ここはUNIX板、最小公倍数はwine使用時のdirectXかSDL+OpenGL

アクションゲームは素直にFlashで作った方がいいんじゃない。
アスキーアートでも写真でもいいから
とりあえずキャラ画像そろえるのが先決

548:名無しさん@お腹いっぱい。
09/07/19 21:17:58
>>541 cairoもImageMagickもperlバインディングもあるけれど
Cでの実装は常識の範疇だよ。ちなみに、

549:名無しさん@お腹いっぱい。
09/07/21 20:21:55
すいませんちょっと質問させてください。
いま、データのインポートをする簡単なプログラムをCで書いているところなのですが、原因のよくわからないエラーが出てしまっています。

このあとfloat型ポインタのpにデータをいれていきたいのですが、何故かfloat *pのコメントアウトを外すと、
unnkoを二回出力したあとセグメンテーションエラーになるのです。コンパイルは通ります。
float *pを米アウトした状態だと普通に動きます。
float型以外の型の変数やポインタを用意しても同じようなエラーがでていまい、これ以上変数を増やせないんです。

開いてるファイルは8kぐらいの大きさだし、変数の数も多いわけではないのでスタックを食いつぶしてるようにも思えません。
誰か間違いに心あたりありませんか?

ちなみにosはScientificLinux5.3でコンパイラはGNUの4.1です
↓ソースコードはこちら

550:名無しさん@お腹いっぱい。
09/07/21 20:24:24
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
char *inbuf;
int i,j;
char c;
FILE *fp;
//float *p;
printf("unnko\n");
if((fp = fopen(argv[1], "r")) == NULL ) {
printf("ファイルオープンエラー\n");
exit(EXIT_FAILURE);
}
printf("unnko\n");

for(i=0;i<126;i++){
if( fgets(inbuf,128,fp)==NULL){
printf("%s Can't read\n",argv[1]);
}
printf("%s",inbuf);
}
fclose(fp);
printf("\n");
return 0;
}


551:名無しさん@お腹いっぱい。
09/07/21 20:30:54
>>550
char *inbufがタダのポインタのままで、メモリ確保してないのが原因。
//float *p; のコメントとかコメントアウトについては、
たまたまそれでメモリ配置が変わってたまたま動いたり動かなかったりしてただけ。

正しくは char inbuf[128]; でちゃんとメモリ確保しろ。

552:名無しさん@お腹いっぱい。
09/07/21 20:36:01
>>551
早いレスありがとう
メモリ確保は既にやった気がするけど夢だったかもしらん。ちょっとやってみる

553:名無しさん@お腹いっぱい。
09/07/21 20:43:13
>>551
キターーーーーーーーーー
ちゃんと動きました。ほんとありがとう

554:名無しさん@お腹いっぱい。
09/07/21 20:45:10
とりえあえず
char *inbuf = malloc(128);
…fgets(inbuf,128,fp)…

char inbuf[128];
…fgets(inbuf,128,&fp[0])あるいはfgets(inbuf,128,fp)…
の違いが分かるようになるくらいは勉強しなよ。

555:名無しさん@お腹いっぱい。
09/07/21 20:51:54
>>554
解決した後に蛇足なこと書くなよ。>>551 の回答者とは別人の人よ。

> …fgets(inbuf,128,&fp[0])あるいはfgets(inbuf,128,fp)…

おいおい、FILE *fp; に対して &fp[0] って意味ないだろ。
(コンパイルすれば単に fp と同じになるにしても)

書きたかったのは &inbuf[0] じゃないのか?

556:名無しさん@お腹いっぱい。
09/07/23 00:37:06
>>530
スレちレス

$ ping -c 1 -t 10 host | tail -1 |awk -F/ '{print $5}'

557:名無しさん@お腹いっぱい。
09/09/04 00:52:32
Linux の RAW ソケットで送信パケットをキャプチャし
ないのってどうすんだっけ? どっかのサイトで見たんだ
けどキーワードが悪いのか見つからない…。

558:名無しさん@お腹いっぱい。
09/09/04 12:09:44
libpcap使いなさい。

559:名無しさん@お腹いっぱい。
09/09/04 12:13:41
すみませんが詳しい方のみ回答をお願いします

560:名無しさん@お腹いっぱい。
09/09/04 18:21:06
回答まだでしょうか?急ぎです。

561:名無しさん@お腹いっぱい。
09/09/04 19:31:34
みんな自分が詳しくないということを自覚しているから何も
言わないコトにしたんだと思うよ。(ということにしておく)

562:557
09/09/05 00:33:12
>>560
> 回答まだでしょうか?急ぎです。
実際急ぎだったんだがお前は俺じゃないだろ(w

キーワードは PACKET_OUTGOING だった。

563:名無しさん@お腹いっぱい。
09/09/10 20:16:00
>>560
出てこいよ池沼

564:名無しさん@お腹いっぱい。
09/09/21 18:30:40
すみませんが詳しい方のみ回答をお願いします

565:名無しさん@お腹いっぱい。
09/09/22 21:06:47
libhoge.so.* という共有ライブラリがあった時、
gcc -o prog prog.c -lhoge
ってやると、progから libhoge.so.*に動的リンク(lddで確認)されますが、
prog.cで、実際にはlibhoge.so.*の関数をひとつも使っていなくても
動的リンクされた状態でコンパイルされてしまいます。

一方、libhoge.aという静的ライブラリがあって、
gcc -o prog prog.c libhoge.a
ってやったような場合は、prog.cの中でlibhoge.aの関数をひとつも使っていなければ、
libhoge.aの中身は使われず、libhoge.aを付けずに
gcc -o prog prog.c でコンパイルしたのと同じバイナリができて、
無駄になりません。

動的リンクの場合でも、関数を使っていないなら、
-lhoge を付けても結果的には動的リンクしないバイナリが作成されるように
できませんか?

566:名無しさん@お腹いっぱい。
09/09/22 22:53:19
使ってないなら -lhogeつけなきゃいいのに

567:名無しさん@お腹いっぱい。
09/09/22 23:05:07
>>566
じゃなくて、使うかどうかわからない場合でも、
-lhogeとか付けておいて、実際に使われなかったらリンクしないようにしたいんだが。
(別の関数から間接的に呼び出されたりして、ライブラリの関数を使ってるかどうか
簡単には判断できないことがある)

静的ライブラリ(libhoge.a)なら可能なのに、
動的ライブラリの場合のみ不可能なのは納得いかないんだが。

ldが、本当に関数を使ってるかどうかチェックするのをさぼってるとしか
思えないんだが、これバグじゃないの?

568:名無しさん@お腹いっぱい。
09/09/22 23:33:53
何でバグって思うのか分からない。わざわざ -lhoge を付けてるのに
付けてないことにしてほしい、って方がワガママでしょ


569:名無しさん@お腹いっぱい。
09/09/22 23:35:59
気に入らなくても、ldはそのように作られているのだから、不要なライブラリを
リンクしないようにするしかない。

570:名無しさん@お腹いっぱい。
09/09/22 23:41:42
>>569
じゃあ、なぜ ldはそのように作られたのか?
関数を(というかシンボルを)使ってるかどうかのチェックぐらい、
簡単にできそうなのになぜしないのか?

571:名無しさん@お腹いっぱい。
09/09/22 23:41:52
>>567
実行時までシンボル解決出来ないんだから、そのライブラリが
本当に呼び出されないかどうかは ld にも分からないんだよ。
だから ld は悪くない。

572:名無しさん@お腹いっぱい。
09/09/22 23:46:17
>>567
そんなことはない。
「シンボル解決出来ない」場合はちゃんと undefined symbol: hoge ..
みたいなエラーが出るから、コンパイル時にも判断できるはず。

573:名無しさん@お腹いっぱい。
09/09/22 23:47:04
>>571
そんなことはない。
「シンボル解決出来ない」場合はちゃんと undefined symbol: hoge ..
みたいなエラーが出るから、コンパイル時にも判断できるはず。

574:名無しさん@お腹いっぱい。
09/09/22 23:51:29
>>571
とりあえず、コンパイル時の判断で不要と思われるライブラリは
(動的)リンクしないのをldのデフォルトにしておいて、

コンパイル時のシンボルレベルの判断では使っていないように見えて、
実際には実行時に使われるような特殊なライブラリの場合のみ、
--force-link みたいなオプションを新設して強制リンクさせればいいだろ。

デフォルトではシンボルを使ってなければリンクしないことにして。

575:名無しさん@お腹いっぱい。
09/09/22 23:54:54
バイナリパッケージでインストールされたコマンドとか見てると、
実際には使ってない動的ライブラリがリンクされてたりするね。
(C++とかXの関係のライブラリにそういうのが多い)

そのソースのMakefileから、-lxxx を外してもコンパイルできたりする。
これって無駄だし、ldが適切にリンク判断してれば
もっと効率の良いバイナリができていたはずなのに。

576:名無しさん@お腹いっぱい。
09/09/22 23:56:33
リ1「こいつ使ってないライブラリをリンクしようとしてるぜ」
リ2「あちゃー、何だそれ」
リ1「でもわざわざ余計な事をするんだから何か考えがあるんだろう」
リ2「リンクする必要が無いなら最初から省けば良いからな」
リ1「仕方が無い、面倒くさいけどリンクしてやるか」
リ2「これでバグとか言われたら最悪だな」


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch