C言語なら、俺に聞け! <14>
■ このスレッドは過去ログ倉庫に格納されています
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言語なら、漏れに聞け! <13>
http://pc.2ch.net/test/read.cgi/tech/1013990673/l50
0002デフォルトの名無しさん
NGNGどんどん名前が長くなるな。
0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNGage
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNGC言語のエキスパート(自称)ってウザイほどいるけど。
C++なら俺に聞けって奴みたことねー
0009初耳
NGNGはつみみです;)
0010デフォルトの名無しさん
NGNG'はつみみです' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
0011デフォルトの名無しさん
NGNG↓ここに一人いますが。
1 名前:スーパーハイソサエティーハッカー日下部陽一 投稿日:02/03/05 09:09
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことなら全てわかるから、疑問な点があったら漏れに聞け。
0012デフォルトの名無しさん
NGNGhttp://www.zdnet.co.jp/products/tdk/hddataclear.html
それともアセンブラも必要なのでしょうか?
別にこの機能が欲しいわけじゃなくて、どういう原理でできているのかなぁ?
と思いまして、書き込みました。
よろしくお願いします。
0013デフォルトの名無しさん
NGNGそんなことをいうと、尋常でないテンプレートが
バカバカでてきててにおえなくなるからなのれす。
0014デフォルトの名無しさん
NGNG教えて下さい。
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNGネタを真に受けている馬鹿
0017デフォルトの名無しさん
NGNG>>11はネタじゃないの?
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNGchar (*ap)[];
strcpy(a[0], "abc");
strcpy(a[1], "def");
strcpy(a[2], "ghi");
となっていたときに、ap を使って a[0], a[1], a[2] を表示させるには
どう書けばいいですか?
0020デフォルトの名無しさん
NGNGchar (*ap)[];←これって配列の大きさが不定です。ってコンパイラに言われない?
0021デフォルトの名無しさん
NGNGじゃ君も「ネタを真に受けている馬鹿」なんだね。
002220
NGNG0023デフォルトの名無しさん
NGNG#include <stdio.h>
#include <string.h>
int main()
{
char a[3][4];
char (*ap)[4];
ap=a;
strcpy(a[0], "abc");
strcpy(a[1], "def");
strcpy(a[2], "ghi");
printf("%s\n%s\n%s\n",ap[0],ap[1],ap[2]);
return 0;
}
0024デフォルトの名無しさん
NGNGint i,j;
int a[5][5];
int **ap;
ap = (int **)malloc(sizeof(int *)*5);
for(i=0;i<5;i++) {
ap[i] = a[i];
}
for(i=0;i<5;i++) {
for(j=0;j<5;j++) {
ap[i][j] = i*10+j; /* apのほうに代入 */
}
}
for(i=0;i<5;i++) {
for(j=0;j<5;j++) {
printf("%d ",a[i][j]); /* aのほうを表示 */
}
puts("");
}
で ap = (int **)malloc(sizeof(int *)*5);を省くと
値が割り当てられていないローカルな変数 'ap' に対して参照が行われました。
というエラーが出ました。
どうしてですか?
0025デフォルトの名無しさん
NGNG**apはどこを指しているの?
mallocで得た領域でしょう?
それを省いたら・・・
002625
NGNG0027デフォルトの名無しさん
NGNG(・ω・)
/[リナ]ヽ
人
0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG酒場でくだ巻いている自称戦士みたいなもんだ。
0030デフォルトの名無しさん
NGNG配列を用意する。
0031デフォルトの名無しさん
NGNGありがとう。
char (*ap)[4]; て宣言しなきゃいけないのか。
別に意味のあるプログラムではないんだけど、昨日からずっと悩んでた。
0032溺れるプログラマー
NGNGSDKアプリケーションはDLLいる?
0033デフォルトの名無しさん
NGNGここはCスレです。
MFCは必要です。Win98以降はMFC4.2DLLが最初から入っているらしいけど。
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGんなこと決まってない。
スケルトンなら全員でかく。
0036デフォルトの名無しさん
NGNGキミおもしろいなぁ。
003735
NGNGドライバ:○
鬱だ・・・
0038デフォルトの名無しさん
NGNGなんらかのOSの上で稼動するのであれば、アセンブラはいらないでしょう。
独自のブートを行う場合は、ちょびっとだけアセンブラがいる。
で、件のソフトは、「オリジナルの起動プログラムで動作するのでOSに
依存しない」と言ってるので、ちょっとだけアセンブラがいるね。
でも、HDDの中身を消すくらい、ちょーかんたん。
って、どっかのスレで出てたな・・・
これか。
http://pc.2ch.net/test/read.cgi/unix/1013144113/n682-690
0039デフォルトの名無しさん
NGNGシュレッダーソフトって全てのクラスタを上書きするんじゃなかった?
0041デフォルトの名無しさん
NGNG俺ペーペーだから、まだ#defineしか書かしてもらえない。
普通の関数でキャリア5年、mainなら10年以上だな。
0042デフォルトの名無しさん
NGNG俺なんか#include <stdio.h>しか書かせてもらえない。
他の#includeも書きたいんだけど。
0043デフォルトの名無しさん
NGNGstac overflowのエラーが出てしまいます。
何が原因なんでしょうか?
0044デフォルトの名無しさん
NGNG配列が大きすぎるとか、関数を再帰的に呼びすぎるとか。
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0048超初心者
NGNGC言語は一通り使いこなせるようになったと言えるんでしょうか?
厨房質問ですみませんです。
0049デフォルトの名無しさん
NGNGC言語を使いこなすと言うのは、C言語で思考出来る事だと思われ。
0050デフォルトの名無しさん
NGNG>http://www.zdnet.co.jp/products/tdk/hddataclear.html
URLをHDDアタッカーと読んでしまって
てっきり物理的にHDDを破壊するソフトか何かかと。
0051デフォルトの名無しさん
NGNGK&Rにある問題を一通り自力で解いてみたなら基本は一通り、ってかんじだね。
実際にはアプリケーションに対する知識と
OSに依存した様々な知識がないとまともなプログラムは組めない。
がんばれ
0052名無しさん@Emacs
NGNGいてるやついたな...
俺も昔はそういう安易な考えだったが、やればやるほど先が長いことに気づく(w
0053超初心者
NGNGC言語で思考するとはどういうことか
イメージを具現化できないんですが、
実際どう言う事なんでしょう?
>>50
励ましありがとう。
>実際にはアプリケーションに対する知識と
>OSに依存した様々な知識がないとまともなプログラムは組めない。
じゃあこれらはどうやったら身につける事ができますか?
>>52
作れないんだ・・・。
0054デフォルトの名無しさん
NGNGファイルに出力するのに、
FILE *fp;
fp = fopen("hoehoe.dat", "w");
for( i = 0 ; i < 100 ; i++ ){
for( j = 0 ; j < 100 ; j++ ){
fprintf( fp , %08f\n , a[i][j] );
}
}
と書いたのですが、「この部分の高速化を考えてみよう。」
と言われて、躓きました。
高速化のポイントを教えてください。
0055デフォルトの名無しさん
NGNGファイルアクセスは一回ですます
0056デフォルトの名無しさん
NGNG学校の宿題は、自分で考えよう。
出来なくたって給料に響きもしないし、まして命まで取られるわけじゃない。
0057デフォルトの名無しさん
NGNG> 高速化のポイントを教えてください。
1. ちまちま書き出さずに一気に書く(例えばa[i][0]〜a[i][99]をまとめて書き出す)。
2. 汎用的なfprintfではなく、浮動小数点に特化した自作printfを作る。
3. 本当に速くなったのかの裏付けをとる(man prof or gprof)
(特に2.を行う場合、苦労した割には速くならない可能性がある)
0058デフォルトの名無しさん
NGNGfunc(int (*a)[3])とかにすればいいって分かったんですけど
関数を呼び出す方はどうすればいいんでしょうか?
func((&a)[3]);
ってすればいいんでしょうか?
005954
NGNG即レスthx。それは、考えたのだけれども、具体的にどうすればよいか分からなかった。
とりあえず、大きなchar変数を用意してやればいいのかなと思ったのだが、
うまくいかず。全然早くならない。
>>56
学校の宿題ではないけれども、お言葉は確かに。
006054
NGNGありがとうございます。
3は知りませんでした。今は、実験できないけれども、実験環境整い次第調べてみます。
1に関しては、>>59にも書いたけれども、
2に付いては、例えば、fprintfの%dなどの処理を省いた関数を作るって事?
林晴比古の本に書いてあって、試したのだけれども、無駄な苦労に終わった。
0062デフォルトの名無しさん
NGNGfunc(a);
0064デフォルトの名無しさん
NGNGdoubleを文字列にしなければならないんだよね?
0065デフォルトの名無しさん
NGNGdouble *p;
p = (double *)a;
for (i = 0; i < 100*100; ++i)
{
fprintf(fp, _T("%08f\n"), *p++);
}
ってのもあるけど、今時のCPUだとどれだけ速くなるかは疑問だな。
遅いかもしれないポイントは
1. 高水準IOを利用している
-> 低水準IOにするとマイクロ秒単位くらいの違いで速くなったり遅くなったりするかも。
2. 配列への二次元アクセス・二重ループをしている
-> 一次元に展開すれば、ミリ秒単位くらいの違いで速くなるかも。全く変わらないかも(藁
3. fprintfを使用している
-> 書式の解釈を行うfprintfよりはfcvtみたいな書式化関数を使った方がミリ秒単位くらいの違いで速い
だが一番大きなポイントは
100*100で合計10000回程度しかループしてないので最適化のしがいがないこと。
100*100*100*100くらいだったら、違いが目に見えて出てきただろう。
0066デフォルトの名無しさん
NGNG呼び出すときは
func(a);
宣言は
func(int (*a)[3]);
以外にも
func(int a[][3]);
func(int a[10][3]);
なども可
0067デフォルトの名無しさん
NGNGローカル変数の配列をポインタで参照したらいいんでしょうか?
0068デフォルトの名無しさん
NGNG---head.hの内容----
#define HOGE
-------------------
head.hの中でHOGEが定義されてるなら、Makefileの中でDEF=1
コメントアウトされてるならDEF=0
と、するにはどういうMakefileを書けばよいでしょうか?
もう自分の力では無理なので、どなたかお願い致します。
0069デフォルトの名無しさん
NGNGソースを見せてよ。
ちなみに俺の環境だと、int型の変数を1個用意する関数を65000回ほど再帰的に呼んだところで
stack overflowを起こしたよ。
0070デフォルトの名無しさん
NGNGそれは難しい。漏れには良い解決法が判らん。
でも、configureとかconfig.hとか使う奴はそのへんどうなってるんだろうね。
きっと解決法はあるはずだ。
0071デフォルトの名無しさん
NGNG入ったらstack overflowする関数のみのソースです。
なぜだか分かりません。
この関数以外の関数が原因ってことはあるんでしょうか?
#define FFT_MAX 1024
#define RATIO 0.1;
void decoding( )
{
int i, j; /* ループ変数 */
double d; /* 作業変数 */
double data[FFT_MAX][FFT_MAX],data2[FFT_MAX][FFT_MAX]; /* 元データの実数部 */
double jdata[FFT_MAX][FFT_MAX]; /* 元データの虚数部 */
int num_of_data; /* データの要素番号の最大値 */
make_data( &num_of_data);
FFT2( data, jdata, num_of_data, 1 );
for ( i = 0; i < y_size1; i ++ ){
for ( j = 0; j < x_size1; j ++ ){
data[i][j] = data[i][j] + image2[i][j] * RATIO;
}
}
FFT2( data,jdata, num_of_data, -1 );
make_output_image( num_of_data );
}
0072デフォルトの名無しさん
NGNG????出来ない事は無いが、やる意味がよくわからん。
ソースの中で
#ifdef HOGE
・・・・
#endif
ってしておいて、Makefaileで
withhoge:
cc -c ... -D HOGE
withouthoge:
cc -c ...
っとかするんだよ。
make withhoge
ってすると、-D HOGEつきのコンパイルが出来る。
つか、それがわかった上での質問なのか?
007367=71
NGNG0074デフォルトの名無しさん
NGNG007674
NGNG0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNG1024*1024*8で8MB、それが3つで24MBか。
まぁまぁ大きいかな。
FFT2の宣言はどうなってんだ?
007968
NGNG>>72
レスありがとうございます.
でもMakefileのマクロをソースに渡すのではなくて
ヘッダーファイルのマクロをMakefileのマクロに渡したいんです.
>>70
色々調べてるんですが・・・grepとか使うのかな
0080デフォルトの名無しさん
NGNGconfig.hって、普通ユーザがコンパイル前に希望の状態に
カスタマイズするために用意しているオプション群
みたいなもんだろ?
Makefileとは関係ないじゃん
0081Makefileとは関係ありません
NGNG0082デフォルトの名無しさん
NGNG>ヘッダーファイルのマクロをMakefileのマクロに渡したいんです.
これをやって最終的に何をしたいんだ?
それを書かないと回答不能。
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGgrep使うで正解じゃない?
shell出力を make内の変数に取り込む事出来るから。
取り込んだら、ifeqで検査。
0085デフォルトの名無しさん
NGNGまあまあ?
スタックならとてつもなく大きいと思うけど・・・・
0086デフォルトの名無しさん
NGNGたぶんもっとまともな解があるよ
0087デフォルトの名無しさん
NGNG008868
NGNGヘッダーファイルのマクロをMakefileのマクロに渡したして
それをもとにオプションを作って>>72さんのように
cc -c ... -D DEF として
別のプログラムに渡したいんです.
それをその別のプログラムを変更しないでやりたいんですが.
>>84
>shell出力を make内の変数に取り込む事出来るから
この部分をどういう風に書いたらいいのでしょうか
grep "^#define HOGE" head.h; then ○○;fi;
008968
NGNGif grep "^#define HOGE" head.h; then ○○;fi;
コマンドでやるとこんな感じだと思うんですが,
Makefileの中でどういうふうにやって変数にどう渡したらいいのか
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNGMakefileはincludeできるぞ。それでどうだ?
009284
NGNG$(shell grep なんたら) で参照出来ると思う。
Win32用GNU make使用。
$(shell cd) で、現在のディレクトリ取得した事は有る。
009371
NGNGスタックサイズを増やすのってどうすればいいんでしょうか?
>>78
FFT2の宣言部です。どうでしょう?
void FFT2( double (*data)[FFT_MAX], double (*jdata)[FFT_MAX], int num_of_data, int flag )
{
int i, j; /* ループ変数 */
static double re[FFT_MAX], im[FFT_MAX];
0094デフォルトの名無しさん
NGNG環境に拠るんじゃない。
環境の話は不毛なので、24MBは取れない環境だったということで。
mallocすればよろしい。ってことでどうでしょ。
0095デフォルトの名無しさん
NGNGPentium3はi586でしょうか?
0096デフォルトの名無しさん
NGNG珍妙なMakefile書いて悦に入ってる奴って
例外なくウンコちゃんだったよ。
0097デフォルトの名無しさん
NGNG板違い
http://pc.2ch.net/hard/
こちらへどうぞ
0098デフォルトの名無しさん
NGNGhttp://www.google.com/search?hl=ja&q=i386+i486+i586%82%CC%88%E1%82%A2+pentiumIII&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0100デフォルトの名無しさん
NGNGunsigned int b0:1;
};
sizeof(struct BITS)
これって何で1バイトや2バイトにならないの?
int型のサイズになるのか?
bcc32+win
0101デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています