C言語なら俺に聞け! Part 112
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/08/08(月) 01:32:01質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
C言語なら俺に聞け! Part 111
http://pc8.2ch.net/test/read.cgi/tech/1121657911/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0229デフォルトの名無しさん
2005/08/11(木) 17:51:550230デフォルトの名無しさん
2005/08/11(木) 17:52:18あんたもスレ違いですから。
cursesは専用スレがないから環境依存OKスレかUnixプログラミングスレ辺りかな。
0231デフォルトの名無しさん
2005/08/11(木) 17:58:52スマソ、スレ違いでした。
CursesにはこだわっていないのですがC言語の標準関数では無理なんでしょうか?
0232デフォルトの名無しさん
2005/08/11(木) 18:00:41しつこいぞボケ
0233デフォルトの名無しさん
2005/08/11(木) 18:04:58誘導したんだから……
標準関数に座標を云々する関数がないことくらいすぐ判るだろ。
0234デフォルトの名無しさん
2005/08/11(木) 18:12:32ふうむ、スレ違い相当の低脳厨がはりついてるのだけはよくわかった。
0235デフォルトの名無しさん
2005/08/11(木) 20:16:060236デフォルトの名無しさん
2005/08/11(木) 22:10:54テストの時、トレースするのめんどいからprintf文で値確かめようとしたら
ソースが汚くなるからやめろっていわれた。テスト終わったら消すっていったんだけど
めんどくさがらないでトレースしろ、といわれたんだけどこれって普通?
知りたい値が最初から決まってるんだからprintfでいいと思ったんだけど
わざわざデバッガでトレースするのめんどくせーし
0237デフォルトの名無しさん
2005/08/11(木) 22:18:36GUIプログラムとかprintfで出力する先がないときもあるし。
0238デフォルトの名無しさん
2005/08/11(木) 22:23:13たんなるprintfじゃ、確かに見難くなるかもな。
デバッグ出力用の専用ライブラリを使うなり作るなりしろ。
DBG_PRINT() とか DBG_MSG() みたいな用途がハッキリ分かるマクロなら、そんなに可読性を損なうこともない。
リリース時にはマクロでブランクに置換。
0239デフォルトの名無しさん
2005/08/11(木) 22:27:24と思ったが、その種の機能は使っているデバッガに有りや無しや
0240データボックス
2005/08/12(金) 00:25:34n1 = 1 //* */ 2
;
if (n1)
printf("何で 0 にならないんだ?\n");
0241デフォルトの名無しさん
2005/08/12(金) 00:33:47最近のCコンパイラはC++ コメントを理解するから //
以降がコメントとされて消えたと思われ。
0242デフォルトの名無しさん
2005/08/12(金) 00:35:220243デフォルトの名無しさん
2005/08/12(金) 00:58:36そもそも、テストの時始めからデバッガ使うなんて横着。
0244デフォルトの名無しさん
2005/08/12(金) 01:03:33近寄りたくないチームだ。
0245デフォルトの名無しさん
2005/08/12(金) 01:16:04debugはマクロ使うな。
テスト後にデバック用printfの削除だと
消し忘れが発生するかもしれない。
出荷やソースコードのcvs管理等をやってない、
どーでも良いプログラムならprintfでも有りだけど。
0246デフォルトの名無しさん
2005/08/12(金) 01:19:320247デフォルトの名無しさん
2005/08/12(金) 01:21:04下手だな。日本語。
0248デフォルトの名無しさん
2005/08/12(金) 01:24:07起動パラメタなどでデバッグレベル調節できるようにすればリリースバージョンでも
デバッグメッセージ消さなくても済む。
0249デフォルトの名無しさん
2005/08/12(金) 01:31:430250デフォルトの名無しさん
2005/08/12(金) 01:37:05この文は「俺はマクロを使うよ。」、「お前らはマクロを使ったらダメだ。」のどちらにも取れる。
>>245は、前者の意味で書いたと思うが、>>246- は、後者の意味で読んでいると思われ。
>>247の2行目に同意。
0251デフォルトの名無しさん
2005/08/12(金) 16:02:12送受信ともにselect()を使って待機させているんですが、
CPU使用率が99%とかいってしまいます。
OSはRedHat9 2.4.20-6です。
0252デフォルトの名無しさん
2005/08/12(金) 16:09:210253デフォルトの名無しさん
2005/08/12(金) 16:09:27独り言ですか。邪魔です。
0254デフォルトの名無しさん
2005/08/12(金) 16:12:25タイムアウト時間をきちんと設定してください。迷惑です。
0255デフォルトの名無しさん
2005/08/12(金) 16:15:54selectから読み書き可能だと通知されたファイルを放置してるとか。
0256256
2005/08/12(金) 16:21:040257デフォルトの名無しさん
2005/08/12(金) 16:22:31なるほど・・・そういう考えもありか
0258251
2005/08/12(金) 16:23:30CPU負荷率が高いのはselect()使ってたら、しょうがないんですか?
(タイムアウトなしです)
下がられるなら下げたいので、その方法もお願いします。
で、もしかして答えは>>254だったり?
0259デフォルトの名無しさん
2005/08/12(金) 16:26:54読んでないのなら読め
読んだのなら理解できてないからもっかい読め
0260デフォルトの名無しさん
2005/08/12(金) 16:33:510261デフォルトの名無しさん
2005/08/12(金) 16:42:190262デフォルトの名無しさん
2005/08/12(金) 16:55:02解決しました、ありがとう。
ちなみに原因↓
SELECT の掟
10. タイムアウトの値は select を呼ぶたびに初期化すべきである。 OS に
よっ て は timeout 構造体を変更する場合があるからである。ただし
pselect は、自分の timeout 構造体を変更することはない。
0263デフォルトの名無しさん
2005/08/12(金) 18:47:56こいつの程度が分かるな
0264デフォルトの名無しさん
2005/08/12(金) 18:50:46その程度の事しか見ていないお前の程度も解かるよ。
0265デフォルトの名無しさん
2005/08/12(金) 19:01:44Linuxユーザは基本的に日本語マニュアル読んでるな
0266デフォルトの名無しさん
2005/08/12(金) 19:03:100267デフォルトの名無しさん
2005/08/12(金) 19:13:31読んでないんじゃなくて読めないんだと思う
イベントとかいったら、たまにLinux使ってる人と話すことがあるけど
そのときになんか聞いたりすると、マニュアル見て英語だったら一瞬で閉じて
googleで日本語サイト限定にして検索する
めっちゃ古いのとか、gnuのじゃなかったりしてもお構い無しにそれを読んでた
0268デフォルトの名無しさん
2005/08/12(金) 19:20:530269デフォルトの名無しさん
2005/08/12(金) 21:25:35英語にかぶれた非国民は出て行け!
0270デフォルトの名無しさん
2005/08/12(金) 21:32:050271デフォルトの名無しさん
2005/08/12(金) 21:52:38char (*(*x[3])())[5];
ってなんだよ?こんな変態じみた宣言を普通に使ってるのか、おまえら?
俺は、宣言の意味さえ分からん・・・
0272デフォルトの名無しさん
2005/08/12(金) 21:55:37意味が分かればそれが分かると思う
意味が分からないということは
それが必要でないって事
必要でなければ知る必要もないでしょ
0273デフォルトの名無しさん
2005/08/12(金) 21:55:570274デフォルトの名無しさん
2005/08/12(金) 21:58:57なんか戻り地の書き方が変なような。
0275デフォルトの名無しさん
2005/08/12(金) 21:59:360276デフォルトの名無しさん
2005/08/12(金) 22:00:23何が分からないのか分からん
0277デフォルトの名無しさん
2005/08/12(金) 22:00:420278デフォルトの名無しさん
2005/08/12(金) 22:04:09>>273 みたいなのは、、二段のディスパッチテーブルに分解したほうが使いかってがいい。
0279デフォルトの名無しさん
2005/08/12(金) 22:04:28http://kmaebashi.com/programmer/pointer.html
x is array[3] of pointer to function() returning pointer to array[5] of char.
つまりxはcharの配列[5]へのポインタを返す関数へのポインタの配列[3]。
0280デフォルトの名無しさん
2005/08/12(金) 22:06:270281デフォルトの名無しさん
2005/08/12(金) 22:09:250282デフォルトの名無しさん
2005/08/12(金) 22:10:290283274
2005/08/12(金) 22:11:18つか今でもピント来ないな。
char (*)[]
配列へのポインタだろ。これを返す関数は。どういうプロトタイプになるんだ?
char (*)f()[]
char (*f)()[]
うーん。
0284デフォルトの名無しさん
2005/08/12(金) 22:11:24charとキャストとポインタが分かってたら分かるだろ
それらを理解してたつもりで上を読んで理解できなかったのなら
理解できてなかった証拠でしょ
0285デフォルトの名無しさん
2005/08/12(金) 22:14:41typedef どう使うのかわからん。
0286デフォルトの名無しさん
2005/08/12(金) 22:22:04char (*)[]を返す関数はchar ((*)[])()。全体を括弧でくくって右に関数の括弧を付ける。
0287デフォルトの名無しさん
2005/08/12(金) 22:22:19俺ならこうやる(型名が糞とか抜きね)
typedef char FIXEDSTRING5[5];
typedef FIXEDSTRING5 *LPFIXEDSTRING5;
以下略
0288デフォルトの名無しさん
2005/08/12(金) 22:23:54つまり自分で書くソースにあんな宣言が必要になったら>>287みたいにtypedefを使うということ。
既存のものを読み解くのに使えるわけではない。
0289デフォルトの名無しさん
2005/08/12(金) 22:35:31typedef char (*Type_X)[5];//char型配列[5]のポインタ
typedef Type_X (*Type_FuncX)();//Type_Xを返す関数のポインタ
//検証用 これでコンパイラ通れば正解。
char (*(*x[3])())[5];
Type_FuncX lp = NULL;
x[0] = lp;
0290デフォルトの名無しさん
2005/08/13(土) 06:32:25char*[5] (*f[3])();
じゃないの?演算子の優先順位の問題?
0291デフォルトの名無しさん
2005/08/13(土) 06:36:240292デフォルトの名無しさん
2005/08/13(土) 13:53:41ttp://www.kouno.jp/home/c_faq/c1.html#21
char (*(*x[3])())[5]; を typedef 分解するとこんな感じだろうか。
typedef char A[5]; /* A = (*(*x[3])()) -> A *(*x[3])(); */
typedef A *B; /* B = (*x[3])() -> B (*x[3])(); */
typedef B C(); /* C = (*x[3]) -> C *x[3]; */
typedef C *D; /* D = x[3] -> D x[3]; */
D x[3];
あるいは
typedef A x[3]; /* typedef char (*(*A)())[5]; */
typedef B *A; /* typedef char (*B())[5]; */
typedef C B(); /* typedef char (*C)[5]; */
typedef D *C;
typedef char D[5];
>286
それだと、char 型を返す関数の配列へのポインタにならない?
char (*f())[5] じゃないか?関数ポインタの型だと char (*(*)())[5] かな。
0293デフォルトの名無しさん
2005/08/13(土) 22:11:48判断するにはどうすればいいですか?
0294293
2005/08/13(土) 22:12:310295デフォルトの名無しさん
2005/08/13(土) 22:27:14>>1
0296デフォルトの名無しさん
2005/08/13(土) 22:42:50argv[]は単なる文字列へのポインタ。
その文字列が、ファイル名かディレクトリ名か、
あるいは、その他の意味を持つ文字列かは、
コマンドラインで実行した本人以外は誰もわからん。
その文字列と同じ名前のファイルやディレクトリが
存在するか確認する方法はOS依存。
まあ、拡張子が付いていたらファイル、それ以外はディレクトリ、
ファイル名、ディレクトリ名に使用できない文字があったらエラーとか、
ファイルをオープンしにいって、成功したらファイル、それ以外はディレクトリとか、
そんな安易な実装でいいんだったら、純粋なCでも可能だけど。
0297デフォルトの名無しさん
2005/08/13(土) 23:04:40そんな安易な実装について聞いているんだろ
OS依存といってもPOSIX準拠な方法があるんだから
もうstatでいいじゃん。面倒くさい。
0298デフォルトの名無しさん
2005/08/13(土) 23:10:160299293
2005/08/13(土) 23:42:56statをmsdnで調べて出来ました!
ありがとうございました。
>>296
決して安易という訳ではないんですが、
こういうシステム依存の部分て調べ辛くて…
文法とかアルゴリズムは良く見つかるんですけどね。
>>295
言いたいことはよく分かるのですが、
正直、1のリンクからは見つけられませんでした。
0300デフォルトの名無しさん
2005/08/13(土) 23:55:13>>296みたいなのは長々と書いてるだけで何の情報も無い
長文結構だが、その中にこっそり情報混ぜてやれよ
こういう>>293みたいなやつにはヒントをあげるだけでいいんだよ。
問題はそのヒントのセンス。
0301デフォルトの名無しさん
2005/08/14(日) 00:13:280302デフォルトの名無しさん
2005/08/14(日) 03:45:390303デフォルトの名無しさん
2005/08/14(日) 04:25:250304デフォルトの名無しさん
2005/08/14(日) 05:51:39俺だって勉強してると言わんばかりに
とくいげに無駄話ばかり続ける状態。
0305デフォルトの名無しさん
2005/08/14(日) 12:03:390306デフォルトの名無しさん
2005/08/14(日) 12:06:270307デフォルトの名無しさん
2005/08/14(日) 12:06:43%x使うのが一番楽。
0308デフォルトの名無しさん
2005/08/14(日) 12:11:280309デフォルトの名無しさん
2005/08/14(日) 12:12:16勉強しようとしたんですが、わからない事があります。
Microsoft Visual C++ .NET にて
/*hello.c*/
#include <stdio.h>
int main()
{
printf(
"Hello ""World\n");
return 0;
}
というのをビルドしたんですが
error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。
と、エラーが二つでます。 どうしたらいいのでしょうか?
設定があるのですか? それともソースを変えなきゃ行けないのでしょうか?
0310デフォルトの名無しさん
2005/08/14(日) 12:15:280311デフォルトの名無しさん
2005/08/14(日) 13:50:55Windowsプログラミングのスレで聞いてくださいね
0312デフォルトの名無しさん
2005/08/14(日) 14:05:2216で割った余りを調べて10-15をa-fに変換して配列に入れる
商が0になるまで続ける
配列を%sで出力
0313デフォルトの名無しさん
2005/08/14(日) 14:09:22ttp://www.kumei.ne.jp/c_lang/
そしてここを見て設定しなおせ
ttp://www.kumei.ne.jp/c_lang/net/index.html
0314デフォルトの名無しさん
2005/08/14(日) 14:10:05>>309な
0315305
2005/08/14(日) 16:00:43ありがとうございます。
ファイルからデータ読み込む方法はfgetcを使用してるんですが、
漢字が上手く取り込めません。16進数表示部が文字化けしてしまいます。
0316デフォルトの名無しさん
2005/08/14(日) 16:07:41宿題スレでコードで解答もらってんじゃん
0317デフォルトの名無しさん
2005/08/14(日) 16:11:55文字化け…?
fgetcの戻り値はただの整数だから化けることはないと思うけど。
言い忘れたけど配列の最後には必ずNULLを入れること。
0318デフォルトの名無しさん
2005/08/14(日) 19:09:320319デフォルトの名無しさん
2005/08/14(日) 19:18:27ライブラリに依存する
0320デフォルトの名無しさん
2005/08/14(日) 19:18:42じゃなくてコンパイラ付属のライブラリ
(あれ?winな環境だとAPIとかでOSなのか?)
0321デフォルトの名無しさん
2005/08/14(日) 19:34:12ないない。
UNIX系なら仮想ファイルで乱数取得が可能かも知れんけど
0322デフォルトの名無しさん
2005/08/14(日) 20:36:23typedef func_t (*func_t)(obj_t *obj);
func_t func1(obj_t *obj);
func_t func2(obj_t *obj);
func_t func3(obj_t *obj);
のように。(実際にはこうは書けない)
typedef void *(*func_t)(obj_t *obj);
void *func1(obj_t *obj);
...
こんな感じに書いて、あとは必要に応じてキャストすれば済むには済むんですが、気になったもので……。
0323デフォルトの名無しさん
2005/08/14(日) 21:03:59できませんC++でtemplate使いなさい
0324デフォルトの名無しさん
2005/08/14(日) 22:53:04挿入ソートが他の2つよりも3倍以上早かったんですがそんなものなんでしょうか?
3つともO(n^2)とどこかでみたのですが
0325324
2005/08/14(日) 22:53:350326デフォルトの名無しさん
2005/08/14(日) 22:55:27実は効率よく終わるように考慮されているロジックであれば一番速かったりする
0327デフォルトの名無しさん
2005/08/14(日) 22:59:20こんな感じなのですが、これが基本形ですよね?
void bubble(int *d,int n)
{
int i,j;
for(i=0;i<n-1;i++){
for(j=n-1;j>i;j--)
if(d[j]<d[j-1]) swap(d[j],d[j-1]);
}
}
void insert(int *d,int n)
{
int i,j;
for(i=1;i<n;i++){
int temp=d[i];
for(j=i;j>0 && d[j-1]>temp;j--)
d[j]=d[j-1];
d[j]=temp;
}
}
0328デフォルトの名無しさん
2005/08/14(日) 23:36:37■ このスレッドは過去ログ倉庫に格納されています