- 1 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:41:54 ]
- C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。 教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 130代目 pc12.2ch.net/test/read.cgi/tech/1250204272/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 53 pc12.2ch.net/test/read.cgi/tech/1253110182/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
- 239 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:38:51 ]
- 何とC99が関係あるんだ
- 240 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 21:08:20 ]
- C99はマルス券の万能取り消し符号
- 241 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 22:49:12 ]
- そもそもsizeof(void)なんかコンパイラを通るの?
voidはサイズなどなかったような…
- 242 名前:デフォルトの名無しさん [2009/10/11(日) 22:58:03 ]
- > void **list = malloc(sizeof(void) * 2);
シムラ〜後ろ後ろ > list[1] = malloc(sizeof(int) * 10); 本当にヤバいのは、むしろこっち
- 243 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:15:44 ]
- void(無形)として宣言してるものにint(有形)の型を代入してるもんな。
逆(void→int等)はキャストで可能だし普通に使うけど。
- 244 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:33:08 ]
- void*にint*を代入するのは全く問題ないだろう
- 245 名前:デフォルトの名無しさん [2009/10/11(日) 23:47:26 ]
- malloc の戻りは常に void * なんだけどね
list[x] がホーキング放射みたいに特徴がなくなるんだよ
- 246 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:18:45 ]
- 複数の異なる型を保持したいなら配列じゃなくて構造体を使うべき。
- 247 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:19:27 ]
- 共用体だろ
- 248 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:25:22 ]
- list[0]とlist[1]をまとめて1つの領域として扱いたがってるようには見えないが?
- 249 名前:230 [2009/10/12(月) 00:52:19 ]
- mallocの質問した者です。
何故このようなことをしたいのかとうと、現在MySQL APIのラッパを作成しており、MySQLの仕様によると select int_col1, int_col2, str_col3 from master; のようなSQL結果を取得する場合、 int foo = int_col1; int bar = int_col2; char *baz = str_col3; のようにテーブルの型に合ったCの型へ代入するべきとあるのです。 SQLはどのような型が渡されるか実行時でないと判別できないため、共用体ではなくmallocによる動的確保を考えました。 mallocの方法でもエラーは出ないのですが、より良い対応はありますでしょうか。
- 250 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:38:26 ]
- > SQLはどのような型が渡されるか実行時でないと判別できない
普通SQLを実行する側がどのような型で取得すべきか知っているはず なので取得したい型で準備するだけ どんなラッパーを作ろうとしてるんだろ?
- 251 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:39:12 ]
- >>249
発行するSQL文の種類だけ、ラッパーを個別に用意するのはダメなん? >select int_col1, int_col2, str_col3 from master; なら、MySQLにおけるテーブルの型が既知な訳で、SQL文も規定されている訳だから 代入すべき変数の型もプログラム作成時に決まるはずでない? >SQLはどのような型が渡されるか実行時でないと判別できないため というのがイマイチ理解不能。動的に変化する検索結果のレコード数を気にして mallocするならともかく。変数の型を抽象化する必要があるってことは、つまり 動的なSQL文にも対応できる、汎用的なラッパーを作りたいってこと?
- 252 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:58:28 ]
- >>251
説明不足ですいません、汎用的なフレームワークを作ろうとしてます。 そのため、どのようなクエリ(型)が送られてくるかは実行時まで不明です。 フレームワーク内で適切な型にオートマッピングさせておきたいのです。
- 253 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:06:33 ]
- 好きなようにすればいいんじゃね?
そこは C の問題じゃないだろ。
- 254 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:38:17 ]
- 特定の変数をマクロで無効にする方法ってないですか?
int 型の a という変数があって a はプログラムの色んな所(数百箇所)で参照されています。 この変数を「Debug時には使う、 Release時には使わない(変数自体無い)」という風にしたいんです。 一応、#ifdefで良さそうなんですが 結構、あちこちで参照されているので#ifdefで囲むと 手間がかかり、ソースも読みづらくなりそうです。 こんな時、あまりソースの変更をせずに変数を無効にすることって出来ますか? (例えば、変数の宣言の所だけを変えるだけで 変数の参照の部分も無効(コンパイルしない)にするなど・・・) #ifdefで一つ一つ書いてくしかないんでしょうか?
- 255 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:54:05 ]
- 無効ってどういう意味だ
- 256 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:57:02 ]
- >>254
int a; もし仮にこれをRelease時だけ消えるようにしたとしたら このaを使ってる部分がエラーになるんだが
- 257 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:59:43 ]
- >254
どういう状況か今ひとつ把握できないのだが aを評価している式や式文も同じように(「Debug時には使う、Release時には使わない」)しないといけないと思うのですが 式や式文自体をマクロで囲っておいてコンパイルフラグ一発とかやったりはする #ifdef NDEBUG # define foo(expression) /* foo bar comment */ #else # define foo(expression) expression #endif /* NDEBUG */ int bar(int x) { x += 128; foo(fprintf(stderr, "x : %d\n", x)); return x; } みたいなのか
- 258 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:49:43 ]
- >>254
assert
- 259 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:05:45 ]
- >>252
どういうフレームワークを作ろうとしているのかいまいちわからんが、 とりあえず全部文字列にして取得しとけばいいんじゃないの?
- 260 名前:デフォルトの名無しさん [2009/10/12(月) 12:39:17 ]
- int *p;
p = &p; *p = 3; printf("%p = %d\n",p,*p); ポインタ変数にもアドレスがあるのでそこを利用してpに&pを代入することで通常のローカル変数のように扱うことができる。 動かしてないのでわからんが、うちの脳内ではそれがうまくいくと信じてる。
- 261 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:44:06 ]
- >260
それはない
- 262 名前:デフォルトの名無しさん [2009/10/12(月) 13:10:49 ]
- お前にはいってない
- 263 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:17:03 ]
- お前にはいりたい
- 264 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:18:09 ]
- お前に入れたい
- 265 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:22:21 ]
- お前にいれた
- 266 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:40:43 ]
- お前らいらね
- 267 名前:デフォルトの名無しさん [2009/10/12(月) 13:41:23 ]
- ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
2ちゃんねるの有志の皆様へ ただいまVIPで例のサイバーテロ集団の本拠地VANKに攻撃をしかける作戦を立てています ただいま人数不足、不利な戦況となっております。 現在技術者部門の方も募集しています。よろしくお願いします。 下記日時に間に合うように準備し、作戦に参加してくれたら幸いです 作戦決行日時:10月12日 18時00分 現行スレ→【yutori7.2ch.net/test/read.cgi/news4vip/1255316576/】 まとめwiki(要編集)www20.atwiki.jp/vipvsvank/pages/1.html ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
- 268 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:46:49 ]
- コピペ君って馬鹿だな、まで読んだ。
- 269 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:49:50 ]
- "無効にしたい"って考えるから難しくなる。
"必要なときだけ有効にしたい"と考えればいい。
- 270 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:48:37 ]
- >>260
*p = 3 によって pがpのアドレスから3に書き換わるため、 *pでそこを参照しようとするのは危険。
- 271 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:59:14 ]
- 0点 p = 3 と *p = 3 の違いからやりなおし
- 272 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:02:15 ]
- Or2=3;
- 273 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:16:10 ]
- >271
一般的なセマンティクスはそうだろうけど、>260ではint *にint **を代入している 暗黙の型変換でint **はint *に変換されて問題なく代入できる しかし、実際にはint **であるので、int *を間接参照してもそれはintではなくint *である 正確に言えば、シンタックス上はintであるが、>260のセマンティクス上はint *であるのだ よって、>270は正しいことを言っていると僕は考える あくまでセマンティクス上の話だからね、実行した場合は未定義動作だな
- 274 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:14:01 ]
- int** とint*暗黙的型変換が出来ることを好んでいるか否かは
CPUによるから、一般的にはあんまりしないほうが良いだろな たとえ出来た場合でも、そのソースをその環境から出さないとい うのならともかくよそで使われることを想定するのなら 本質的に処理系依存であることを明示する為に キャスト演算子の直書きは避け 例えば int **pint2ppint_80x86(int *) int **pint2ppint_PowerPC_G5(int *) とか使うべきだろうな(マクロでも良いが) C++でクラスの場合は、直系クラス間でのポインタの相互運用性 は保証されている(できなければC++コンパイラと名乗る資格は 無い)からルールに沿って行うべきだが
- 275 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 18:48:40 ]
- BCCのフリー版では getopt() がつかえないみたいなんですが、
コマンドライン引数は一般的にどのように処理しているのでしょうか?
- 276 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 18:52:19 ]
- argvの内容を一つずつ取り出して評価していけばいいのでは?
- 277 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 18:58:26 ]
- >>276
今までそのようにしていたんですけど、getopt() を使う方が見た目も すっきりしてわかりやすいので使ってみようと思いました。 BCCになかったので、何か代替のものがあるのかと思って質問しました。
- 278 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:12:15 ]
- getopt()は非標準
- 279 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:51:22 ]
- posixにあるのに?
- 280 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:26:40 ]
- posixはposix
- 281 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:52:13 ]
- CHAR_BITSってcharのbit数ですよね?
charが8bitでintは12bitといった処理系も世の中にはあるらしいんですが、この場合1byteのbit数っていうのは何bitなんでしょうか? そもそもこのintは2byte?それとも1.5byte?
- 282 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:57:39 ]
- intは最低16ビットなければいけない
いや、16ビットというふうに決まっているわけではないが、 少なくとも -32767 〜 +32767 の値を表現できなければならないので、 16ビット以上なければおかしい
- 283 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:33:53 ]
- int main(void)
{ char buf[LINE_BUF]; char buf2[LINE_BUF]; char *log[10]; char *log2[10]; FILE *fp = fopen("a.txt", "r"); FILE *fp2 = fopen("b.txt", "r"); while(fgets(buf, sizeof buf, fp)) { //printf("bufだよ%s",buf); //printf("%s", log[0]); while(fgets(buf2, sizeof buf2, fp2)) { //printf("buf2だよ%s",buf2); if(strncmp(buf,buf2,3)==0) { break; } else if(strncmp(buf,buf2,3)>0) { printf("%s",buf); break; } } } fclose(fp); return 0; }
- 284 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:40:21 ]
- int main(void)
{ char buf[LINE_BUF]; char buf2[LINE_BUF]; char *log[10]; char *log2[10]; FILE *fp = fopen("a.txt", "r"); FILE *fp2 = fopen("b.txt", "r"); while(fgets(buf, sizeof buf, fp))//NULLが返ってくるまで・・・ { while(fgets(buf2, sizeof buf2, fp2))//NULLが返ってくるまで・・・ { if(strncmp(buf,buf2,3)==0)//先頭から3文字が一致したらbreak { break; } else if(strncmp(buf,buf2,3)>0)//a.txtの行の値のほうが大きくなった=つまりb.txtにはもう存在しないため抜き出す { printf("%s",buf); break; } } } fclose(fp); return 0; } ファイルは降順にソートされています。 a.txtにあってb.txtない行を抜き出すプログラムのつもりですが、当然正常に処理されていません。 2重目のwhile文で、抜けるたびに行を先頭から見るいくにはどうしたらよいでしょうか?(今のプログラムだと抜けるたびに次の行へ移動してしまいます)
- 285 名前:284 mailto:sage [2009/10/12(月) 22:41:42 ]
- 見やすくそろえたつもりですが、左揃えになってますね。。。
- 286 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:47:39 ]
- >>285
Tabは削除されます スペースはデータ上は残りますがブラウザの仕様で表示されません 長いソースを詠みやすい状態で貼り付ける時は別の方法を使うしかありません
- 287 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:00:40 ]
- codepad.org/
ここ使えば問題ないさ
- 288 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:15:31 ]
- >>286
そうでしたか。 1つ目のwhileの{の終わりがfcloseの上です。 2つ目のwhileの中にほとんどの処理が入っています。 見にくいと思いますが解読お願いします。。
- 289 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:31:42 ]
- >>284
#include<stdio.h> #include<stdlib.h> #include<string.h> #define LINE_BUF 1024 int main(void) { char buf[LINE_BUF]; char buf2[LINE_BUF]=""; FILE *fp = fopen("a.txt", "r"); FILE *fp2 = fopen("b.txt", "r"); if(fp==NULL || fp2==NULL) exit(1); while(fgets(buf, sizeof buf, fp)) { if(feof(fp2) || strncmp(buf, buf2, 3)<0) { printf("%s",buf); } else { while(fgets(buf2, sizeof buf2, fp2) && strncmp(buf, buf2, 3)>=0) ; } } fclose(fp); fclose(fp2); return 0; }
- 290 名前:284 mailto:sage [2009/10/12(月) 23:40:08 ]
- >>289
インデントのないコードは読まない事にしている
- 291 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:41:46 ]
- >>290
ちょっと面白かったw 専ブラでポップアップ表示しな
- 292 名前:288 mailto:sage [2009/10/12(月) 23:47:37 ]
- >>289
細かい部分も修正ありがとうございます。 実行してみたのですが、a.txtの先頭行以外がすべて表示されるプログラムとなっています。。。
- 293 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:47:42 ]
- 2chブラウザ開発しているやつって暇なの?
エラー処理も満足に実装できない糞APIなのに、どうして頑張っちゃうの? ドカタ根性ってやつ?
- 294 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:58:17 ]
- >>292
#include<stdio.h> #include<stdlib.h> #include<string.h> #define LINE_BUF 1024 int main(void) { char buf[LINE_BUF]; char buf2[LINE_BUF]; FILE *fp = fopen("a.txt", "r"); FILE *fp2 = fopen("b.txt", "r"); if(fp==NULL || fp2==NULL) exit(1); fgets(buf2, sizeof buf2, fp2); // 追加 while(fgets(buf, sizeof buf, fp)) { if(feof(fp2) || strncmp(buf, buf2, 3)>0) // 不等号の向きを変えた { printf("%s",buf); } else { while(fgets(buf2, sizeof buf2, fp2) && strncmp(buf, buf2, 3)<=0) // 不等号の向きを変えた ; } } fclose(fp); fclose(fp2); return 0; }
- 295 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:00:19 ]
- >>294
完璧です!神!
- 296 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 01:35:07 ]
- 暗黙の型変換される訳ね―だろksg
- 297 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:22:59 ]
- アンカーつけろよ
- 298 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:36:36 ]
- Turbo C++ 1.01 のパッケのなかに getopt.c があるからそれ使えば?
- 299 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:50:09 ]
- インデントが1桁ってありえないわー
最低でも2桁だろう
- 300 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:00:52 ]
- インデントは8桁が正統
- 301 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:06:28 ]
- はい、またインデントは何桁がいいかが始まりましたが、
雑談は雑談スレでお願いします
- 302 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:22:17 ]
- そうそう。
今インデントを決める大事な話をしてるんだから、雑談なんかで邪魔するんじゃないぞ。
- 303 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:30:26 ]
- 4タブや2タブは、画面の幅が640しかなかった時代の苦肉の策。
今は1920もあるんだから8タブに戻すべき。
- 304 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:39:38 ]
- 変数名なども長くなる傾向にあるから、いくら画面の幅が広くてもあまりソースの幅が広がると単純に読みづらくなる
ソースだけでなくプロパティウィンドウやデバッグ出力など色々なペインも並べなくちゃならないし 5-10-15…が適当
- 305 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:52:44 ]
- 4桁が正義。
それだけ行っとく。
- 306 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 08:38:23 ]
- デフォルト8桁、お好みで4桁
- 307 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 14:41:34 ]
- >>305
インデントに使うキャラクタをいろいろ混在させないことだけが正義だろw
- 308 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 14:52:37 ]
- たしかに、半角スペースとハードタブが入り混じったソースを見るとイラっと来るわ
それでもインデントが整ってればまだいいんだけど(エディタのマクロでハードタブに一括置換すればいいから)、 たまに半角スペースが1個足りなかったり多かったりする行とかあるのな
- 309 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 15:06:10 ]
- タブの手前に紛れ込んでるスペースがクソw
- 310 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 15:08:23 ]
- 整形ツール使えよ
- 311 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 16:11:57 ]
- >>308
ネットからコピペするとそうなりやすい。。 俺はそういうの気になるから一つ一つ既存のコードにあわせて修正してるけどな。
- 312 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 16:14:51 ]
- >>308
そのマクロ公開してください><
- 313 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:16:44 ]
- >>312
自分で作ったわけじゃない どっかで公開されてたのを拾っただけ
- 314 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:32:21 ]
- >>312
エディタが何かも判らずクレクレ言うような奴には つ彡テイッ! [map T 1G!Gunexpand -a -t 4^V^M]
- 315 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:39:01 ]
- 昔は GNU indent とか使って整形したこともあったけど
今はxyzzy上でワンキーで自分好みに整形するだけだな。読むときは。
- 316 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:45:47 ]
- indentは微妙に好みの設定にできないから嫌。
- 317 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:52:42 ]
- ・n x { ごとに、行頭からisgraph()が真になるまでの0個以上の半角スペースおよびタブを、n x 1個のタブに置き換える。
・{ ごとに、n++する。 ・} ごとに、n--する。 っていう整形ツールでも作ればいいじゃない。
- 318 名前:デフォルトの名無しさん [2009/10/13(火) 18:55:45 ]
- で } が多すぎた瞬間に自爆とか、楽しそう
- 319 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:14:47 ]
- タブ厨氏ね
- 320 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:30:08 ]
- 注意していても誤字脱字が多くて困っています。
少なくする方法を知りませんか?
- 321 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:32:30 ]
- >>320
tabつかえ
- 322 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:38:21 ]
- >>317
printf("{"); まぁ、gg=Gとかですませる。 >>321 いや、そこはなんかちが、、、 tabでキーワード補完しろという意味じゃないよね?
- 323 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:39:07 ]
- ちょっとスレチかもしれんが、みんなは「自分だけが使う小物ツール」とかよく作るほう?
自分がC初心者の頃は、学習を兼ねて例え同じようなものがフリーであっても作ってみたりしてた。
- 324 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:45:39 ]
- >>323
作るよ。 問題解決のためにふつーにプログラミングできるようになって一人前。
- 325 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:48:35 ]
- 自分だけの環境を構築するなら、プログラミング必須だろ。
- 326 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:55:48 ]
- >>321
偶然だけど、俺はShift-TABにdabbrev-expandを割り当ててる。 実際には、範囲選択中は別動作になるように、 wiki.livedoor.jp/kogo77/d/xyzzy%A4%CE%C0%DF%C4%EA にしてるけど。 IDEの方が、意味を考えながら補完してくれるという意味でずっと便利なんだけど 同じキーを繰り返すだけで選択できて、かつ他のキーを使わずに確定して そのまま先の入力に進めるのがなかなか。
- 327 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 06:28:52 ]
- float型の配列のソート方法が分からなくて困っています.
配列の数は9個で,降順,昇順どちらでも構いません. 中身は,float f_hairetu[9] = {145.20, 55.32, 33.20, 55.55, 348.99, 12.01, 1.29, 88.29, 0.98} などのデータが入っています.
- 328 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:52:05 ]
- qsortつかえば
- 329 名前:デフォルトの名無しさん [2009/10/14(水) 08:14:38 ]
- ソースファイルから、
define、グローバル変数、関数名 などなどの情報を抜き出して一覧化してくれるフリーソフトがありましたら教えてください。
- 330 名前:デフォルトの名無しさん [2009/10/14(水) 08:34:12 ]
- doxygen
- 331 名前:327 mailto:sage [2009/10/14(水) 09:18:10 ]
- >>328
ありがとうございます。qsort関数は、検索してint型のソートなら良さげなサンプルが見つかったのですが、float型のものは見つからず仕様も良く分からなくて困っています。
- 332 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 09:57:31 ]
- int compare(const void *p1, const void *p2) |
float f1 = *(float *)p1, f2 = *(float *)p2; if (f1 == f2) return 0; return f1 > f2 ? -1:1; } int main() { float data[] = { ... }; qsort(data, sizeof(data)/sizeof(data[0]), sizeof(data[0]), compare); ... }
- 333 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:01:23 ]
- まあそれだとNaNが含まれてるときソートできないな
- 334 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:04:10 ]
- NaNとかなる
- 335 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:17:48 ]
- NaNってC言語の比較内で判定できるのか
- 336 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:31:07 ]
- C99ならできる
- 337 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:36:07 ]
- C99なら △
C99では ○ C99においては ◎
- 338 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:45:48 ]
- >int型のソートなら良さげなサンプル
2項を引き算してたりしてw
- 339 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:05:31 ]
- >>337
それは意味が変わっているだろ。 「C89ではNaNを正しく扱えないが、C99において*なら*できる」 の省略としての「C99なら」なのだから「なら」を取ってしまってはいけない。
|

|