C言語なら、俺に聞け! <11>
■ このスレッドは過去ログ倉庫に格納されています
0001スーパーハッカー 日下部陽一
NGNGいろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったらオレに聞け。
だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通のようだぞ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419
K&Rで挫折するようなヤツはこれでも買え。
これでわからない、救いがたいヤツはあきらめろ。
・作ってわかるCプログラミング(アヒル本と呼べば通のようだぞ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419
・前スレ C言語なら、オレに聞け! <10>
http://pc.2ch.net/test/read.cgi/tech/1008300863/l50
0232デフォルトの名無しさん
NGNGまとめたって別にいいじゃん?
漏れは、この例みたいな一文字変数ならば>>231みたいにまとめちゃう。
視認性が気になるならば一文字変数はなるべく使わない。
0233デフォルトの名無しさん
NGNGなるほど
thx
0234デフォルトの名無しさん
NGNG画面に複数コントロールを置いたとして
C++などではクラス型にしてサブクラス化すればいいんだろうけれど
Cの場合はどうすればよいんですか?
例えばstatictextの背景色変えたりするのは
設計時に一つ一つのコントロールのwndprocを全部記述しないといけない?
うまい方法があれば教えてください。
最悪の方法はIf文でhandle比較だろうけれど
なんか
http://pc.2ch.net/test/read.cgi/tech/1009190994/337
http://pc.2ch.net/test/read.cgi/tech/1009071535/183
と同じ種類の質問かな?
一番簡単なのは
1)SetWindowLongで GWL_USERDATA に背景色を埋め込む
2)WM_CTLCOLORSTATIC でコントロールハンドルから
GetWindowLongして もう判るよね
事で、背景色だけじゃないなら構造体のポインタを渡してやればいいんじゃないの?
0237デフォルトの名無しさん
NGNGようはsetwindowLongでHandleに構造体のポインターを読ませるということですね。
大体見えてきました。ありがとうございます。
0238
NGNGintはエラー値が返せるつーのはあるんだろうけど、mfcはBOOLだよねぇ
統一できねぇ〜〜
boolの存在意味がわからん。エラー値不要の部分に使うにしてもtrue/falseが逆で混乱の元
一体なんに使うの?
0239デフォルトの名無しさん
NGNG統一しなくていいから、
関数の前に引数と戻り値の説明を
コメントでつけとけ。
0240デフォルトの名無しさん
NGNG1bitで表現できるから、メモリの節約になるんだよ。
(と言ってる人がいたら要注意)
0241デフォルトの名無しさん
NGNGCで書いたプログラムの一部を、アセンブリ言語で書く方法を
教えろよ。
0242デフォルトの名無しさん
NGNGそういう態度なら一生教えません。
0243デフォルトの名無しさん
NGNGなんで? おしえてよ、知りたいんだよ。
0244デフォルトの名無しさん
NGNG処理系依存。
0245デフォルトの名無しさん
NGNGunsigned char asmcode[]にアセンブラコードぶち込んで
そこめがけてジャンプすりゃいいんだよ。
0246デフォルトの名無しさん
NGNG例えば、DOSのCの関数をASMで書くときは、その関数の名前の先頭に
アンダーラインを足した名前のプロシージャを書くだろ? そして、関数を
呼び出すと、関数の引数が右から順にスタックに積まれて、関数の実体
である、ASMで書いたコードがcall命令で呼び出されるって寸法じゃん。
けど、これって、Windowsでも通用するやり方なんかな。
0247デフォルトの名無しさん
NGNG貴方の命題は自己矛盾しており実現不可能です
お使いのコンパイラをご指示頂ければ回答可能な質問としては
1)Cのソースがあり、コンパイル出力の一部をアセンブリソース形式で出力したい
2)Cのソースの一部をアセンブリ言語で書き直したい
3)Cのソースの一部にアセンブリ言語を埋め込みたい
があります。
0248デフォルトの名無しさん
NGNGもちろん通用する。
0249241
NGNGけっこう難しい日本語だね。 2と3の違いがけっこう微妙で分かりに
くいよ。 まあ、要は、cの関数をアセンブラのコードで直接書くって
やり方だよ。
0250デフォルトの名無しさん
NGNGホントにむかつく態度だな。
Cの関数内にアセンブラコードを埋め込む(インラインアセンブラ)のと
アセンブラで書いてアセンブルしたオブジェクトをリンクするのでは
やり方が違う。
おまえは前者でもやってろよ。
0251デフォルトの名無しさん
NGNG暴力的なことが男らしいと痛い勘違いをしてるんだよ。
0252241
NGNGまあ、まあ、そんなにプンスカすんなよ。又ー利いこうよ、又ー利と
インラインアセンブラ使ったら、擬似命令つかえねーじゃん。
オレが言ってるのは、それぞれ別々に、コンパイルとアセンブルして
オブジェクトを結合するやり方なんだよ。
0253デフォルトの名無しさん
NGNG0254241
NGNGばかにスンナよな. リンかぐらい使えるってよ。 けど、オレが出来る
のは、DOSまでであって、Windowsの場合を知りたいんだYO!
Windowsの、内部をあんまし知らないし、下手にアセンブラでコードィ
ングしたら、一般保護例外が出ちゃうし。 そもそも、下手にレジスタと
かイジるコードとか書いてもいいのかなっと思っただけ。
0255デフォルトの名無しさん
NGNGまずはWindowsの勉強でもしろ。
0256247
NGNG1、拡張子がpasのファイルを作成して下さい
2、アセンブラ関数は
function 関数名(引数):返り値;
asm
アセンブラによるコード
end;
とすれば、アセンブラによりC++から呼び出される関数が作成出来ます
0257247
NGNG拡張子 .ASM のファイルを作成し、TASMを呼び出す方法もありますが
上記方法がお手軽です
0258デフォルトの名無しさん
NGNGC++でも単独でインラインアセンブラは使えるよ。
それに書いている内容は単にアセンブラの関数をPASCALのインラインで書いているだけだ
アセンブラだろうとPASCALだろうとhファイルで明示的に示してあるものは
call文で呼べるのでは?
>>254 ばかというより無知なんだからもう少しアセンブラとCについて調査すべきでは?
いまの無知のレベルは1日か2日で解消できるレベルだ。
リンカの使い方はわかってないぞ。
MP3関連のソースとプロジェクトファイルを探してソースをみれば
MASMやNASMとVC++やGCCになっているはずだから
その辺(特にmake)をじっくりみることだ。
大体アセンブラで組んで高速化が期待できないものは無理にアセンブラを使うべきではない。
ループ演算とか独立した関数とかに特化するか
CとかPASCALで書いてから展開すべきだ
C単独やC++でのWin programingをやってから出直せ
0259258
NGNG割と見つけやすいサンプルとして3DNOW関連のヘッダーを探すといいかも
0260デフォルトの名無しさん
NGNGそりゃ下手だ
0261デフォルトの名無しさん
NGNGp = (char *)malloc(sizeof(char) * mojisuu);
if(p == NULL) return;
みたくやってます。でもよく考えると何故mallocが失敗するんでしょうか?
ヒープを使い切ったとか?mallocが失敗する理由って主に何があるの?
unixかwindowsでお願いします。
以前
if((p = (char *)malloc(sizeof(char) * mojisuu))==NULL)
p = (char *)malloc(sizeof(char) * mojisuu);
見たく、一度失敗したらもう一回繰り返しているのみたことあるけど
こういうやり方って意味あるんでしょうか?
0262デフォルトの名無しさん
NGNGふつー、ないと思われ。
そんなモノが通る処理系があるか、よく知らない。
0263デフォルトの名無しさん
NGNGメモリが断片化して連続して領域を取れない場合がある
後の問題は、たぶん意味はな。
でももしかしてマルチスレッドで動いているなら
その間に他のスレッドでヒープが空くかもしれないけど、時間を
置いてないので確率はゼロに近い
0264デフォルトの名無しさん
NGNGどうやらmallocミスったら潔くあきらめるのが良さそうですね。
それかwhileでとれるまで回すとか(w
先にある程度の大きな領域を非常用にダミーでmallocしておいて
メモリ不足になったらこの領域を開放して再度 mallocしてみる という自作アロケート関数を用意
で、メインループのどこかで この非常用ダミー領域が使われた場合に警告を出して安全に
終了するよう全力を尽くすと
いう方法が常套手段かと
0266デフォルトの名無しさん
NGNGうーん。やっぱ皿とフォークがそろってから
食事にとりかかるのが美しいでしょうね。
なければやらない。
そうじゃないと奪い合いしているようで。
0267デフォルトの名無しさん
NGNGつまり一番最初にガバッととっちゃうんですか?
自分はいつも必要なときにmalloc。とれなきゃ処理を終わらせちゃいます。
あちこちでmallocするのでいちいち失敗の処理とか書いてます。
そうすると異常系のデバッグが大変だけどね。
これは非常用だから文字列用とかファイルバッファとかが収まる程度の大きさね
すると、文字列用とかファイルバッファ用ではあんまり厳密にチェックしなくて済むでしょ?
大きな領域とか取る前だけチェックすればいいでしょ?
異常処理がだいぶ楽になるでしょ?
C++なら例外使えばいいんだけどね
0269デフォルトの名無しさん
NGNG�@最初に予備のメモリをある程度取る
�Amyallocでアロケート。戻り値はチェックしない。
�Bmyallocはアロケートできなければ予備を解放してアロケート
予備を使ったというフラグもたてる。
�Cどこかでフラグをみてメモリがやばそうだから終了処理に移行
というかんじですか?
0270デフォルトの名無しさん
NGNG教えてください。よろしくお願いします。
0271仕様書無しさん
NGNG「スタートアップルーティン」とかで検索しろやゴルァなのですぅ
0272デフォルトの名無しさん
NGNG解からなかったら又質問させてもらいます。
0273デフォルトの名無しさん
NGNG関数とかライブラリを教えてください
0274デフォルトの名無しさん
NGNGlibjpeg, libgifで検索してみ
0275デフォルトの名無しさん
NGNGまたデータセグメントの変数とスタックの変数はどう違うのでしょうか?
0276273
NGNG助かりました。どうも
0277デフォルトの名無しさん
NGNGa = 10;
と
int a = 10;
は意味が違うのですか?
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNGそれぞれテキスト領域、初期化データ領域、bss領域、スタック領域のどれに格納されるのでしょうか。
1.外部変数
2.関数内でstatic int hoge = 1;
3.関数内でstatic int hoge;
4.関数外でstatic int hoge = 1;
4.関数外でstatic int hoge;
また、初期化データ領域、bss領域が違う必然性はゼロ初期化するか否かだけなのでしょうか。
0280デフォルトの名無しさん
NGNG普通は初期化されてなければbss、一部でも初期化されてればdata
bssは実行ファイルを小さくする意味がある
静的持続時間の変数の格納場所にスタックは使えない
0281デフォルトの名無しさん
NGNGが表示されるのですが、このGMTっていうのは、C言語で何の関数を使えばよいのでしょうか?
0282デフォルトの名無しさん
NGNG関数内というのを何らかのブロック内と判断すると---
1と、ひとつめの4とふたつめの4は、スコープをファイル中に
制限するかどうかの違いのみ。
すべて静的なので、初期化データ領域かbss領域に割り当てられる。
データかbssかは、初期化されているかどうかで決まる。
bssは実行ファイル中にはその変数のサイズのみ保持していて
ロード時に実際の領域の分だけメモリを確保する(で、そのあと
ゼロクリアされる)。どこかで、bssはBetter Save Spaceとかって読んだ気が。
ほんとかな??
いいかげんな言い方をすると、「静的」という言葉は、
コードの実行開始時に確定している、といった意味で
使われている様子。Cに関して言えば、staticというのが
一般的な静的という意味の指定と、スコープの限定の両方に
使われるため混乱しがちかも。
UNIXが使える環境があるならば、大きな配列を作って、
初期化したりしなかったり、staticにしたりautoにしたり
してみて、各実行ファイルについて、sizeコマンドを
実行するといいかも。Winなら、DLLやEXEをクイックビューアで
みれば、ある程度のことはわかります。そこまでしなくても
静的であることがわかっているならば、実行ファイルの
ファイルサイズでデータかbssかはなんとなくわかるかも。
0283デフォルトの名無しさん
NGNGGMTの文字列を作成したいの?
それとも解析してtime_tとかに変換したいの?
せめてそれくらいは教えてちょん。
0284デフォルトの名無しさん
NGNGとても解かりやすかったです。
0285デフォルトの名無しさん
NGNGGMTの文字列を作成したいのです・・・。
0286ななしさん
NGNG2 localtime() あるいはlocaltime_r()
3 sprintf()で出力。でもlocaltime()はその名のとおり時差が
入っているので、修正しとくこと。
0287ななしさん
NGNGする奴はまずいないと思われるので。
まぁ好きにしてくれ。
0288デフォルトの名無しさん
NGNG0289
NGNG0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNGカンキチ・リョウツの略です。
なぜ真ん中が&なのかについては諸説あります。
0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNG0295デフォルトの名無しさん
NGNGtime_tを与えたら直接文字列を生成してくれるなら重宝するが。
汎用性がないなら素直にsprintf使ったほうが便利と思われ。
つーか、使いたくなるだろうな。
で、gettimeofdateじゃなくてgettimeofdayだろうな。
0296デフォルトの名無しさん
NGNGint get_lastmod_str(char *buf, time_t lastmod)
{
strftime(buf, 1024, "%a, %d %b %Y %H:%M:%S GMT",
gmtime(&lastmod));
return (1);
}
0297デフォルトの名無しさん
NGNGそれとも、localtimeで日付を管理と言う位だから
MS-DOSをサーバーOSとして採用しているのかな。
0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNGstrftime()のフォーマットの細部に差があるのは知ってるよ。
だけど、RFC822形式の出力に使う程度なら問題ないはずだけどね。
少なくとも、OSがファイルの日時をローカル時間で管理しているとは思わないし、
time()やstat()/fstat()のtime値がTZに依存しない事も知っている。
だから、「timeをGMTで出力」にgmtime()でなくlocaltime()を使おうなどとは
考えた事もない。
0300初心者
NGNG0になったりします。何がおかしいのか教えててください
#include<stdio.h>
#include<math.h>
int main(void)
{
double s,c,g;
scanf("%d",&g);
s = sin(g);
c = cos(g);
printf("sin= %f\n",s);
printf("cos= %f\n",c);
return 0;
}
0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNG先頭のポインタだけを渡すのが一般的なのでしょうか??(&char[0])
0304デフォルトの名無しさん
NGNGchar[100]を構造体でくるんだり、文字列の
末尾ポインタだけを渡すようなことは、
あまり一般的ではないと思いますよ。
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNG・ヒープ領域って具体的にどんなのですか?
絶対アドレスのココからココまで、みたく決まってるんですか?
・ヒープってプロセス事に非干渉なんですか?ほかのプロセスに壊されることはないの?
・ローカルやグローバルにもっている静的な配列や変数はヒープに作成されるの?
いろいろ教えてください。とりあえず、unix&winで。m(_ _)mペコリ
0307デフォルトの名無しさん
NGNGchar* buff
下側のように書きたいです。
以 上
0308デフォルトの名無しさん
NGNG1Uとか0Uとか
でてくるんだけど、これって何?
0309デフォルトの名無しさん
NGNGなお、単位を変更するには、setlocale(LC_LUCK, "ISO")などと
すればよい。類似のものに、int k=2B;などがある。
0310デフォルトの名無しさん
NGNG>でてくるんだけど、これって何?
ここで聞くなとは言わないけど、
こういうどんなダメな解説書にも必ず説明があるような
事を聞く人って、本を買わないのか?
0312デフォルトの名無しさん
NGNG> setlocale(LC_LUCK, "ISO")
好運量もISO規格化されてたのか。
0313デフォルトの名無しさん
NGNG私は現在C言語を勉強しているものですが
二次元配列の引数の渡し方がわかりません。
どうか教えてください。
0314デフォルトの名無しさん
NGNGとりあえず俺が答えられるのは
> ・ヒープってプロセス事に非干渉なんですか?ほかのプロセスに壊されることはないの?
1. ヒープはプロセス空間の一部です。
2. *まともな*メモリ保護を持っているOSの場合、
自分のプロセス空間以外の空間を破壊することはありません。
よって、*まともな*メモリ保護を持っているOSの場合、
ヒープを他プロセスが破壊することはありません。
ちなみにメモリ保護自体持っていないOSとしてMS-DOSがあります
# MS-DOSはOSかどうかを議論するつもりはないです
0315日下部さんチェキ!
NGNG/*test*/
#include <stdio.h>
void foo(char (*p)[10]){
printf("%s\n", p);
printf("%s\n", p+1);
}
int main(int argc, char *argv[]){
char str[][10] = {"january", "february"};
foo(str);
}
わたしもビギナーですが、確かCプログラミング専門課程という本に詳しくのってますよ。
0316デフォルトの名無しさん
NGNG使ってはいけないという話をききます。
こんど小数部が二桁の計算を行うので、どのくらい
誤差が出るかとおもい、ためしにVC++で下のような
処理を書いて試してみました。
しかし、どうも誤差はでないようです。
扱う値が小さい場合は、誤差はでないのでしょうか?
{
srand(time(0));
const int loop_num = 10000;
int total = 0;
double real_total = 0;
for (int i = 0; i < loop_num; i++) {
int n1 = rand() % 1000; // 整数部
int n2 = rand() % 100; // 小数部
total += n1 * 100 + n2; // 整数計算
double d = (double)n1 + (double)n2 / 100; // 実数計算
real_total += d;
}
TRACE("%f\n", (double)total/loop_num/100); // 整数での計算結果
TRACE("%f\n", real_total/loop_num); // 実数での計算結果
}
0317デフォルトの名無しさん
NGNGXの付かないMacOSモナー
0318デフォルトの名無しさん
NGNG乱数つかってるところ
int n1 = 0 ;
int n2 = 3
にでもして、最後に
if(total/100.0==real_total) TRACE("hogehoge\n") ;
でもしてみそ
0319デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNGモジュール構成図を書け
グローバル変数の一覧表や構造体の一覧表を作れ
まともな関数名を付けている場合、これだけで処理の概要はわかる
まともなソースでない場合、あきらめろ
例)ローカル変数がない、
1000行以上ある関数が何個もある
0321デフォルトの名無しさん
NGNG日本語化の類いなんですけど.
後諦めきれない場合は自分で書いた方が早いですか?
人のソース見るのって大変だ.
0322NERO
NGNGCでビジュアル的な部分の作り方を書いてある本を見たこと無いのですが。
RPGの作り方や、シューティングの作りかたとか
0323デフォルトの名無しさん
NGNGRPGやシューティングでもファイル操作は必要だろうよ。
“ビジュアル的”ってのが何を指しとるのかしらんが、
例えばWindowsならDirect Xとかか?
そういったライブラリは“Cの本”の範疇外だろうよ。
Cの本ではなく、画像処理系の本を買って読め。
0324デフォルトの名無しさん
NGNGCの入門書とかにそういう話が出ないのは、「ビジュアル的な部分」は
Cの仕様の範囲外で、OS依存の部分だから。
「Windowsで」のようにOSを限定した本なら、探せばあるでしょう。
でもそれは「Cの本」じゃないよね。
0325デフォルトの名無しさん
NGNGでもどっちにしてもCの本ではないな。
0326デフォルトの名無しさん
NGNGそれ、C++の作法よ。
C言語だと char *buff の方が普通。
>>313
出来ないこともないけど、面倒だからやめとけ。
2次元配列やめて、C++とSTL勉強してstd::vectorを2重にして使え。
std::vector<std::vector<Type> >
関数に渡すときには参照渡しな。
>>325
結局、表示部分で機種依存な本ばっかりだけどな。
0327デフォルトの名無しさん
NGNGvoid hen(float ab,float b,float c);
for(i=0;i<N;i++){
hen(ab[i],b[0],b[i]);
printf("%4.1f\n",ab[i]);
}
void hen(float ab,float b,float c){ /*関数*/
if(ab>1){
ab=b*c/10;
}
0328デフォルトの名無しさん
NGNGC言語などで文字リテラルってありますよね。
一般的には処理系依存と言うことになっているけど、ASCIIに関しては
ほとんどの文字コードでは下位7bit以下がASCII互換だと思います。
と言うことは英数字のみに限定すればASCIIの16進コードで
処理してしまってよろしいのでしょうか?
それともASCII互換ではない文字コードを標準文字セットとして使う
OSやコンパイラがあるのでしょうか。
知っている方教えて下さい。
0329デフォルトの名無しさん
NGNG何故と問われても、“引数”という物を理解してくださいとしか…
float hen(float ab,float b,float c){
if(ab>1){
return b*c/10;
} else {
return ab;
}
}
for(i=0;i<N;i++){
ab[i]=hen(ab[i],b[0],b[i]);
printf("%4.1f\n",ab[i]);
}
03302月発表なド素人君
NGNG間に合う気がしなく、高校卒業不可能の危機におちいってる者です。
C言語がここまで難しいものだったとは、今頃後悔している所です。
ただ後悔してももぅ仕方ないのでなんとかして完成させようと思っています・
今日は質問させてもらいます。
WindowsでSDLを使って、グーとチョキとパーの絵を画面に出し、
選択したら、相手のランダムの手で勝ち負けの結果を出し、
続けるか続けないか尋ねるという形で
最終的に結果を表示できるような物にしたいです。
結果の数字や、じゃんけんの手、それから背景画面すべて
用意したbmpファイルを載せる形にしたいと思っています。
家では、Cマシーン ttp://homepage1.nifty.com/kentake/ を利用させていただいており、
学校ではTurbo C++を利用しています。
もちろん発表は学校で行われるのですが、
どうも分からない事だらけで助言をお願いしたい。
SDLをヘッダファイルとして利用できるようにする方法
(新たなヘッダファイルを加える方法)が分からないのですが、
分かる方、助言お願いいたします。
0331NERO
NGNG質問させてもらいます。 Cの基楚本をクリアーした後、
皆さんどのような道を歩んだんですか? 教えてください。
■ このスレッドは過去ログ倉庫に格納されています