1 :
SHOW-A孫 :
02/09/13 17:23 漏れ10才。3才のときから父SHOW-A息子にプログラムを叩き込まれてきたんだ。
いろいろな言語を極めたけど、一番漏れになじんだのはCかな。
Cのことなら父をも超えた。疑問な点があったら漏れに聞け。
便所とメシ食ってる時以外は暇だが、いちいちFAQに載った質問に応えるほど暇じゃないよ。
課題丸投げなら別スレにいってね。あと、至急父に仕事を与えてやってください。
コンパイラ、過去ログなどのリンクは
>>2-5 あたり
>>1 お疲れ〜。これで粘着がいなくなるといいね。
8 :
デフォルトの名無しさん :02/09/13 17:42
>>1 おつかれ。
しかし、メール欄にvoidを忘れてる。
SHOW-Aがスレ主になっても、伝統は守らねば!
そしれ新スレ上げ
9 :
デフォルトの名無しさん :02/09/13 17:43
>>1 すげー、10歳で父を越えるとは。
将来有望じゃん。
次スレはひ孫で次はやしゃごか?
ロマサガ2みたいに継承をきぼん
>>1 お疲れ様。
どうもこの684というハンドルは験が悪いようなので、次に質問する時は
また新しいナンバーを使います。
>>1 仕事を振るべきなのは祖父の方じゃなかったか?
>>13 気にするなよ。
一部のfread厨が騒いでいるだけだから。
でも他のスレでレス番号の684は使えないな(ワラ
16 :
デフォルトの名無しさん :02/09/13 20:14
mallocを使って動的に確保した3次元配列と同じくmallocを使って 確保した2次元配列をつくり、3次元配列の値を2次元配列に代入したいのですが どうもうまく行きません。全て"0"の値をもつテストデータを3次元配列に格納 してから2次元配列へ a=xxx[i][j][k]; xx[j][k]=a; のように代入してからxx[j][k]の値を出力すると 4252620 4252620 0 0 0 0 . . . のように、先頭2つにおかしな整数値が現れます。 どこがおかしいのでしょうか?
>>16 ソースを見せてもらわないと、文章だけじゃ分からないです…。
>>16 変数の型を正確に書け。どうやって表示したのかも
>>16 int xxx[ISIZE][JSIZE][KSIZE];
int xx[JSIZE][KSIZE];
だったら、
memcpy (xx, xxx[i], sizeof (xx));
でいけるんじゃないか?完全なコピーではないなら別だが
それはそれとして、おかしくなった原因を必ず突き止めておくべき。
最低でも変数定義、malloc部分、表示部分を見ないとわからない
ふーっ、また1はつまらん名前だな・・・
22 :
デフォルトの名無しさん :02/09/13 21:19
unsigned doubleは合法?
>>22 1ビット目使用しないだけ?扱える数増えるの?
>>22 そういう拡張をしてはならん、という規定はないと思うから、合法なんじゃない?
そんなの見た事ないけど。
>>22 がそれを何に使いたいのかも知らないけど。
符号なし浮動小数点数・・
---
>>16 の再掲です。-----
void main(){
int ***xxx,***yyy,**xx,**yy,a;
// 3次元配列を確保
// 2次元配列を確保
//ファイルオープン
for(i=0 ; i < t ; i++){
for(j=0; j < 128 ; j++){
for(k=0; k < 40 ; k++){
fscanf(fp1,"%5d", &a);
x[i][j][k]=a; //データは全て"0"
}
}
for( m=0 ; m < 6400 ; m++ ){
for(i=0 ; i < t ; i++){
for(j=0 ; j < 128 ; j++){
for(k=0 ; k < 40 ; k++){
a=xxx[i][j][k];
xx[i][m]=a;
}
}
}
}
for( m = 0 ; m < 6400 ; m++ ){
for(i = 0 ; i < t ; i++ ){
xx=xx[i][m];
printf("%d\n",xx);
}
}
}
改行の数が多すぎて書き込めないのでmallocを使った 配列の動的確保の部分はとりあえず省いています。
本当にきちんと三次元配列みたいなものをつくれているのかしら・・・心配だ。
>>28 こんなのでやっていますが......。
(一応、失敗はしていないようです)
int ***new_matrix3d( int time, int range, int sector ){
int i,j;
int ***a;
if( ( a = ( int*** )malloc( sizeof( int** ) * time ) ) == NULL ) return NULL;
memset( a, '\0', sizeof( sizeof( int** ) * time ));
for( i = 0; i < time; i++ ) {
if( ( a[ i ] = ( int** )malloc( sizeof( int** ) * range ) ) == NULL ) {
free(a);
return NULL;
}
memset( a[ i ], '\0', sizeof( int* ) * range );
for( j = 0; j < range; j++ ) {
if( ( a[ i ][ j ] = ( int* )malloc( sizeof( int ) * sector ) ) == NULL ) {
free(a);
return NULL;
}
memset( a[ i ][ j ], '\0', sizeof( int ) * sector );
}
}
return(a);
}
一様乱数を作りたいんですが。 randでは無理ですよね?
31 :
デフォルトの名無しさん :02/09/13 22:24
>>29 ゼロクリアならmemset使わないでcallocでいいでしょ。
32 :
デフォルトの名無しさん :02/09/13 22:31
>>29 メモリーの確保に失敗した時、freeするのはaだけじゃまずいでしょ。
メモリーリークの原因になるよ。
33 :
デフォルトの名無しさん :02/09/13 22:33
>>26 for(i=0 ; i < t ; i++){
・・・
for( m = 0 ; m < 6400 ; m++ ){
for(i = 0 ; i < t ; i++ ){
xx=xx[i][m];<−−−−−−−−??????
printf("%d\n",xx);
}
}
}
?のとこはこれでいいつの?
>>30 ええ、思いっきり疑似乱数ですから。
数学の本見てその通り実装するのが吉。探せばありそうだけど。
35 :
デフォルトの名無しさん :02/09/13 22:35
>26 a=xxx[i][j][k]; xx[i][m]=a; 一対一の射像になっていない。>
即レス有難うございます。
>>31 callocってつかった事が無くて...同じような使い方
ができるとは聞いていますが。
>>32 あ、そうですね。ループして全部開放して
やらないといけないですね。
>>33 そうです。まずいですか?
39 :
デフォルトの名無しさん :02/09/13 22:40
>26 for(i〜〜){ for(i〜〜){ と iが2つ重なっているよ。
重箱 ・多次元配列 a[1,3,5]; ・配列の配列の配列 a[1][3][5];
xx=xx[i][m];これは駄目!
#define JSIZE 128 #define KSIZE 40 ... int t; int (*xxx)[JSIZE][KSIZE]; int (*xx)[KSIZE]; ... xxx = malloc (sizeof (int) * t * JSIZE * KSIZE); xx = malloc (sizeof (int) * JSIZE * KSIZE); ... とりあえず、こっち↑のほうが余分なループがなくていいと思う。 xxは固定サイズなので、動的に割り当てる必要はないと思うのだが?
43 :
デフォルトの名無しさん :02/09/13 22:42
>>37 xxかえたら迷子にならない?
ポインタの計算元じゃあないの?
>>30 一様乱数で検索かければたくさん出てくるじゃん。
っていうか一様乱数って知らなかったから検索かけちまった。
あっ、勘違いした!xxのサイズが全然違うな。スマソ
つーかポインタやりなおし 木構造実装してみ勉強になると思うよ 参考 struct foo{ type Obj; foo* pParent; foo** pChild; };
ひょっとして、これって。。。 int (*xxx)[JSIZE][KSIZE]; int (*xx)[JSIZE * KSIZE]; ... int xxx_size = sizeof (int) * t * JSIZE * KSIZE; xxx = malloc (xxx_size); ... xx = xxx; // 内容を一致させるのであれば、ポインタの置き換えで終わり または xx = malloc (xxx_size); // 同じサイズ memcpy (xx, xxx, xxx_size); // コピー これで終わり?
>>46 そういうあなたもポインタを勉強し直してね。
foo *pChild;でしょ。
>>46 > foo** pChild;
これに何入れるか教えてあげないと怪我すると思った。
違う、 struct foo *pChild;だ。
これのやり方おしえてください。 基本情報の問題なんですけど、ずっとわからなくて次に進めません。 回答や参考書を見てもわからないです。 どなたかわかりやすく教えてください! -------------------------------------------------------------------------------- 次のような3バイトで数値±a×16^nを表現する浮動小数点がある。 | 指数部7ビット | 仮数部16ビット | ┌─┐─────────┐──────────────┐ │ | n | a | └―┘―――──――――┘―――───────――――┘ ↑ ↑ ▲ ビット0 数値全体の符号 小数点の位置 (0:正、1:負) ・仮数部の数値は、絶対値で表す。 0<=a<1。 ・指数部のnは、指数部が16^nであることを表す。 ・指数部のnの負数は、2の補数で表す。 この形式で表現できる負の数の最大値(0に最も近い値)はどれか。 ア 000001 イ 00FFFF ウ 410001 エ C00001 オ F00FF1 --------------------------------------------------------------------------------- 答えは「エ」なんです。でも、やり方がわかりません。 自分で問題を解いた時は、 「この形式で表現できる負の数の最大値(0に最も近い値)はどれか。」 と書いてあるので1 111 1111 1111 1111 1111 1111(2)にしてFFFFFF(16)って 答えがなったんですけど、解答欄にないんです。
>>38 え.....そんな....。
>>39 あ、ミスです。i〜、j〜です。
>>40 重箱??
>>41 あ、そうでした。
a=xx[i][j];
とかにしないと。
>>42 それでも2次元、3次元つくれるんですね。
(知らなかった)
xxのインデックスも変わる可能性があるので、一応、
動的に割り当てています。
とりあえずありがとうです。
今日は終電近いので帰ります。
(連休も無しだな......とほほ。)
明日またレスします。
>>51 あちらこちらに貼るなよ。
荒らすなら例のスレだけにしろよ。
>>48 多木構造なので子供がイパーイあるのよ
子供ポインタの配列でしょ
>>55 ああすまん、木構造って二分木かと思った。
でも、foo **pChild;じゃなくてstruct foo **pChild;にしないとだめじゃない?
>>47 はキャストが無かったので、一応完全版
#define JSIZE 128
#define KSIZE 40
main () {
int (*xxx)[JSIZE][KSIZE];
int (*xx)[JSIZE * KSIZE];
int t;
int xxx_size;
//
t = 3;
// xxx
xxx_size = sizeof (int) * t * JSIZE * KSIZE;
xxx = (int (*)[JSIZE][KSIZE]) malloc (xxx_size);
// xx
xx = (int (*)[JSIZE * KSIZE]) xxx; // 内容を一致させるのであれば、ポインタの置き換えで終わり
//
free (xxx);
}
つーか、二分木なら子供へのポインタが二つあるだろうが(鬱
>>56 structいる?
省略できるんじゃない?
>>61 拡張子を.cppじゃなくて.cにしてコンパイル。
いや、その子供達のリストを保存する領域作らないといけないでしょと。
いちおうまとめとこう。
>>16 >>57 を使うと、常に
(xxx[i][j][k] == xx[i][m]) (ただし m = j * KSIZE + k)
が成り立っている状況を作れる。多次元配列の要素の連続性を利用している
。。。というつもりで作ったけど、バグってたらごめん
>>62 そこまでCにこだわってるわけじゃないので・・・
このスレとしては不可?
>>63 うん、だから
AddChild()DelChild()GoToChild()とか
実装するとポインタとメモリの動的確保の練習になるでしょ
>>前スレ955 1000でマジレスカコイイ!
それでfoo構造体にpChildの数とか必要だけど内緒(w
>>69 *とunsigned intはサイズ同じだからお好きなほうを
>>67 そうそう、最初コピペかと思って読んでみたら
子供辿るには再帰呼び出しが必要になるからその練習にもなるぽ
74 :
デフォルトの名無しさん :02/09/13 23:25
可変この引数を持たせる関数は __cdecl じゃないとだめらしいのですが、この関数はどうやって引数の数を調べるのでしょうか?
>>72 つーかポインタのsizeof(p)ってunsigned intしかないと認識してますが
>>74 引数を右からとか左からとか
VCならヘルプみそ載ってたよ
んなこたぁない
呼び出し元でpush/popするか呼び出し先でするかの差? _cdeclと_pascalって。
>>77 そうでふか
winかunix位でしか組んだこと無いのでスマソ
>>78 アセンブラならフォーマット調べてスタックから取ってくるだけじゃない?
Cでやるより楽なはずだけど
>>80 大抵の環境でintと同じサイズになると言うのは真だけど、
標準で規定されているわけじゃないから、実装依存と言わざるを得ないってところ。
>>76 本読んでたら 79が言うように _cdcelは呼び出し元で引数をPUSH/POPするんだって。
呼び出された側ではドンだけ引数が渡されるかわからないから。
でもそのままだとどっちにしろドンだけ引数が渡されたかわからない気がするのは僕だけ?
だから、引数の数を渡したりターミネータを渡したりprintfのようにフォーマットで指定したり工夫がある
>>84 なるほど。printfって引数の数が合ってないときは動作保証なかったしね。
納得っす。ありがとー。
tmpfileの実装方法がはげしくわからん。 どうやったらクローズ時にファイルが消えるようにできるんだYO! 独り言スマソ
1クローズしてから消す 2作ったときからインデックスと分離しておく 3OSの機能
>>86 >tmpfile
とりあえずこんな妙な英単語はない。
最近の若いもんはテンポラリも知らんのか・・・。
>>87 悪い、3以外全然わからん(煽りじゃなくてマジで)
>>88 fcloseも改造すればいいのかな???
fclose時に削除ルーチンを呼ぶ方法がわからないのよ。
>>89 省略形くらい大目に見てやってよ
通じるんだから
93 :
デフォルトの名無しさん :02/09/13 23:55
NEG命令ってなにに使うのでしょうか。
>>90 tmpfileで作成したディスクリプタを判別する方法があるんだろ
#ライブラリ内部で
で、fclose時に自動的に消している、と。
>>90 改造とかじゃなくて(できんのか?
オープン->何か処理->クローズ->再オープン->remove()->クローズ
で駄目?
>>95 ああやっぱりfcloseにしかけがあるんだね。ありがとう。
プログラム終了時に削除ってのはatexitでどうにかなるかな。
98 :
デフォルトの名無しさん :02/09/13 23:59
先輩からC言語なら大抵どんなことでもできると教えてもらいました。 で、早速C言語でXBOXを作りたいのですが、C言語はドコで習えばいいのですか?
>>96 ごめんなさい、実装方法なんて書いたけれど、
本当はtmpfileの仕組みが知りたかっただけなんです。
0時丁度に100ゲトー
>>100 2011/11/11 11:11に111取ることを忘れるな
>>16 聞きたいんだけど(寝てるだろうけど)、
>>29 の、
int ***new_matrix3d( int time, int range, int sector );
↑これで得られる、ツリー状にポインティング(?)された配列の集合、
この構造がどうしても必要なの?(ちなみに、この関数はエラーに弱い)
というのも、最初は多次元配列であれば何でもいいのかと思ってたんだけど、
このnew_matrix3dという関数は、どうやら16の作ったものじゃなさそうだから、
これと互換性のある構造を使わなければいけないのかな、と思って。
だとすれば、
>>57 は全く見当違いだから、忘れてほしいw
(つづく)
>>98 学校or本とかネットで独学
というかここでそんな質問をしている時点で
才能はないと思われているかもしれない…
がんがれ
106 :
デフォルトの名無しさん :02/09/14 00:13
>>98 糞箱の中身が実質WinNTだと理解した上で言ってるのか?
109 :
デフォルトの名無しさん :02/09/14 00:18
糞箱って言うなゴルァ
110 :
デフォルトの名無しさん :02/09/14 00:23
ループ付きの迷路の解答で道が1つの所を消していくよね 最短距離割り出すには距離保持しつつ再帰呼び出しで辿るしかないですか?
(つづき)
>>16 で、
>>26 のコードにはいろいろ疑問な点があるってのは既出のとおりだけど、
一番本質的な問題は、
xxx[i][j][k] と xx[i][m] の要素どうしの対応関係
が書かれていない、ということ。普通に考えれば、
m = j * 40 + k, i = m / 40, k = m % 40
または
m = k * 128 + j, k = m / 128, i = m % 128
だと思うんだけど、
0≦m<6400 に対して
0≦j*40+k (または k*128+j)<5120
という、致命的なサイズの不一致!!!これが何を意味しているのかが
わからなければ、何もアドバイスできないよw
まあがんばってくれ
(おわり)
>道が1つの所を消していくよね
「行き止まりのところを消す」でしょ。
距離保持しつつ〜はあってると思う。
>>111 というか、一番外で6400回も回すなといいたい。
意味無い事してる。
いや、あの、111の方に言っているのではないですよ。
>>113 いやわかってるよw
彼はね、パフォーマンス云々以前の水準だと思うから、
とりあえず判然としないロジックから正す方向で。。と。
まじめそうだし礼儀あるから見込みはあると思われ
>>99 tmpfile()内で作成したファイルを消す関数を
atexit()で登録してるんじゃないかな?
と思ってみるテスト。
116 :
デフォルトの名無しさん :02/09/14 03:07
糞コードメンテ中。 グローバル変数 const char foo[] = "hogeratta"; があるとき、 fooのメモリ領域に(適当にキャスト使って)書き込むのって、規格上safe でしたっけ?? const はとりたくないんです。C++のmutableなメンバ 変数のような役割なので。
117 :
デフォルトの名無しさん :02/09/14 03:24
>>116 const char buf[] = "ABC";
int main()
{
int n = (int)buf;
char* pbuf = (char*)n;
cout << buf << endl;
strcpy(pbuf, "abc");
cout << buf << endl;
return 0;
}
コンパイルは通ったけど・・・
118 :
デフォルトの名無しさん :02/09/14 03:31
>>117 うん。そりゃコンパイルは通せるよ。そうではなく、どんな処理系でも書き込み可能な位置に
"hogeratta"が置かれる事が保証されるか、をしりたかった。
あとできればC++ではなくANSI Cの規格がしりたいです。
119 :
デフォルトの名無しさん :02/09/14 03:35
プログラムうpしたいんだけどあげるとこのリンクおしえて スレ違いとか言わないで・・・
safeでは。 配列を確保してから書きこみしているのだから。 char *p = "hogeratta"; ならマズイ。
>>86 OSに依る。
unix系なら、オープンされているファイルでも削除できるので、
オープンした直後に削除する。この場合の削除は、ディレクトリ
エントリからファイル名を削除するだけで、ファイルがオープン
されている間は、ファイルの実体は存在したままとなる。ファイル
への参照がすべてクローズされると、ファイルの実体が削除される。
windows系なら、ファイルをオープンする際に、delete-on-closeが
指定できる。
122 :
デフォルトの名無しさん :02/09/14 03:35
あ。const か。スマ。
124 :
デフォルトの名無しさん :02/09/14 03:48
>>116 規格はもっていないが、「ANSI C言語辞典」によると
"非volatileのconstオブジェクトを読み込み専用領域に置く処理系もある"
そうなのでunsafeかもね。volatileつけとけ。
>>118 ISO/IEC 9899:1999 によれば、変更できることは要求されていない。
"/tmp/fileXXXXXX"
(char []){"/tmp/fileXXXXXX"}
(const char []){"/tmp/fileXXXXXX"}
The first always has static storage duration and has type array of char,
but need not be modifiable; the last two hav e automatic storage duration
when they occur within the body of a function, and the first of these two
is modifiable.
現実的には、コンパイラオプションでread-onlyでない場所に置くよう
指定できる場合が多いが。
const で volatile って矛盾してるような......
>>117 なぜ一度intにcastしているのかを小1時間(略)
>>122 Please describe your Registration Purpose in a more comprehensive manner
とか出て先に進めないんですが(英語嫌
それとpublic domainがフリーですか?
>>130 多分木構造C++(win)で作ったからフリーでうpしたいのですが
sourceforgeはちゃんとしたオープンソースのソフトウェアを多人数で開発するための もろもろを貸してくれる場所。 そういう習作を晒したいならgeocitiesでも借りれ。
[#5] If an attempt is made to modify an object defined with a const-qualified type through use of an lvalue with non- const-qualified type, the behavior is undefined. If an attempt is made to refer to an object defined with a volatile-qualified type through use of an lvalue with non- volatile-qualified type, the behavior is undefined.104) あ。おそかったか。まあいいや。C99ね。
>>132 と思ったけどHP作るんじゃなくてUp版みたいのないですか?
Up版->Up板(鬱
yahooのブリーフケースでも借りとけば?
>>134 なるほど
C99でもダメってことですね。
さんくす。
>>126 constは左辺値になれないだけであるので、
別に矛盾はしていないと思われ。
で、volatileならいいのか?
>>138 (´-`).。oO(ISO/IEC 9899:1999 == C99 なわけだが……)
って、:1999 って書いてあるわな(鬱 吊ってきます。
>>142 ゴミが入ってたTreeObj.cppは捨ててね
Cスレなんだが…
>142 403 forbidden. 取れない。
>>146 いや46なんですがオペレータオーバーロードしたほうが見やすいので
スレ違いですが・・・
main()の正規書式だと見ずらいでしょ
それに参照便利だし・・・
>>148 おまけにテンプレートもあるし
これは頑張ってCにした方がいいですか?
>>149 件の共有フォルダ開いてブラウザのアドレスをコピペするんですか?
GlobalFree(this); ってのは…?
>>150 中途半端すぎて笑える。何故
TreeObj<T> **pChild;
なんだ? std::vectorを使用しない理由は?
std::mapが木構造を使っているのは有名な話だと思っていたんだが。 上まあスレ違いなわけだが。苦笑。
・メンバ変数はコンストラクタの初期化リストで初期化しましょうね ・コピーコンストラクタを、実装するかは別にして書きましょうね ・operator=の戻り、おかしいですよ? ・addChildの引数は値渡しでいいんですか? 以下延々と続く…
ちなみに delete this は気をつければ危険ではないよ。 object suicide という。
>>154 TreeObj.cppは捨てて下さい
>>155 >>156 VC5.0だとvectorは自己参照ポインタ使うと引っかかるんですよ
メモリの動的確保も練習したいし
んでmap使うと習作の意味がなくなるんで
>>157 はい参照渡しでないと大量コピーが起こります
=の戻りおかしいですか?
>>154 >GlobalFree(this); ってのは…?
そういえば MS 社は WinAPI::waveOut*** のサンプルで
HeapAlloc() 使ってるけどよそのサイトでは malloc で済ませてる
ところもあるんだけど、malloc じゃダメなのかな。
一般的には TreeObj<T>& operator=(ほげ); で定義して return (*this); ね。 多分Effective C++かMore Effective C++に載ってる。
夜が明けるのでスレ違いはこのへんでやめます。ゴメンナサイ。
// 子供から先に解放していく while(ChildNum) (*pChild)->del(); これ大丈夫なん?
>>163 ほげはどう使うんですか?
漏れには無変化に思えてしまうのですが・・・
=(ほげ){Obj=ほげ;return(*this);}
ですか?
ねぇ誰か教えてよ
>>165 それは大丈夫なはず(弱気
子供が解放されると親のChildNumが減ってくから
常に先頭の子供を解放してやればいいはず
最後ね。もしくは別スレに移動してくれ。 return (*this); しないと TreeObj<std::string> x, y; x = y = "foo"; の2行目がコンパイルできないだろう?
>>169 ああ、そうですね勉強になりました
聞きたいことはまだありますがやめときます
スレ違いだけど燃料になりましたか?
卑屈になんなよ(ワラ 個人的には全部ディープコピーってあたりが漢だねぇって感じだヨ
楽しいときには邪魔がはいるものだねぇ
>>172 C++スレ行ってしばいてくれるんなら行きますが(自爆
行きますか?
相手が教えてクンだと盛りあがりに欠けるねぇ・・・ 燃料になんないよ
>174 NULL紛争でも起こしたいのか?(藁
隠蔽とかクラスとか無理矢理実装できるけどそれは置いといて Cの標準的な文法で比較的分かりにくいのって ポインタと再帰呼び出しくらいですよね
> 再帰呼び出し 文法関係ない
>>178 書き方誤り
文法->手法
これならどう?
>>119 わかりにくいならsignal()の定義はなかなかのものだと思う
>>180 WinProcもsignalも似たようなもんじゃない
漏れはDOS時代にint86使ってたけど確かに割り込みは敷居高いかも
>>181 WinProcつーかThreadProc
>>181 void (*signal(int sig,void (*func)(int)))(int);
まあ似たようなもんですが
WinProcなら LRESULT CALLBACK (*WinProc)(HWND ...); ですかね
int86に比べてThreadのEvent定義って若干使いやすくなったよーな これも進化ですかね
燃料の意味を考えよう
おならぷー
>>185 うんだから必死だよ(w
多分木言われたとこ直してみたり(まぁ、相変わらずmemcpy()使ってないが
Cでのクラス実装で突っ走ったこと逝ったりすればいいのかな
あ、子供ポインタリストリークしてた 逝ってきます
189 :
デフォルトの名無しさん :02/09/14 09:22
インクリメントとデクリメントって
190 :
デフォルトの名無しさん :02/09/14 09:25
大分出身なの知ってました?
191 :
デフォルトの名無しさん :02/09/14 10:18
セミコロンってどうよ?
>>193 そっちか 風流だなぁ
おれはセミの匂いのするコロンかと思ったよ
int a = 123;ってなってるのをchar s[10]に文字列123としていれる方法を教えてください。
voidには教えたくない
>>196 だからぁ〜
aを10で割ると余りはどうなるよ?アレになるっしょ?そんな感じで...
200 :
デフォルトの名無しさん :02/09/14 12:42
コンパイルしないで直接書いてるんでバグったらごめん for文の継続条件ちょっと違うかも。でもこんなかんじだとおもわれ char *hoge(int a) { static char str[256]; int i,j,k; //桁拾い for(i=0,j=a;j>0;i++,j/=10); //代入 for(j=0,k=a;j<i;j++,k/=10) str[j]=k%10+'0'; return(str); }
>>201 なんで snprintf(s, 10, "%d", i); じゃいけないんだ?
>>203 実装方法知ってると改造できるでしょ
例えば、printf()でQWORDを表示したり・・・
つーかすいませんsnprintf()知りませんでした
ぐはぁ、最後に'\0'入れ忘れますた 逝ってきます
>>206 オーバーフロウするかどうか判断できない方がDQN
それにa==0の時何も表示されなさそう もっかい逝ってきます
>>208 オバーフローしないでしょ下げっぱなしなんだから
でもa<0の時は・・・
またまた逝ってきます
>>210 オーバーフロウってバッファオーバーフロウのことだよ。
snprintf使ったら宣言のない関数の呼び出しと言われた上に、リンクエラーが発生しますた。
>>214 適宜読みかえてくださいな。僕はVC++は知らない。
>>212 int型で255桁は逝かないと思うが10桁は逝くね
>>216 255桁も10桁も逝くか逝かないかはintのビット数によるだろ。
というわけで、208には賛同しかねるってことで。
標準関数でできることは標準関数でやればいいと言っているだけなんだけど・・・ C99?しらん
>>217 現状ではintがそんなに大きいの無いと思われ
スパコンでだって10進256桁のintなんてメモリがひどいことになるよぅ
>>220 重箱の隅をつついてみただけだ。気にしないでくれ。
>>219 ,220
普段高級言語しか使わない身では考え方についていけない。
でかけます。さよならw
>>220 つーか10進256桁のintって楽しすぎ
biosからvramまで1つの転送で終わり?
itoaって標準関数だと思っていて、Linux+gccで使えなくて初めて標準関数じゃないと知った。 馬鹿だった・・・・
255桁のintはかんがえられんが、10桁ゆかないintなら考えられるな。
226 :
デフォルトの名無しさん :02/09/14 14:38
fp = fopen ("file", "r");// or fp = fopen ("file", "rb"); fseek (fp, 0, SEEK_END); l = ftell (fp); このコードってUNIX系でしか正しく動かないようなのですが 標準でファイルサイズを取得する方法はあるんですか?
227 :
デフォルトの名無しさん :02/09/14 14:41
>>226 Windowsでも正しく動くけど・・・
>>227 そうなんですか。
確かfseekにSEEK_ENDを指定したときはテキストモードでオープン
しないと動作は保証されないようなことを読んだことがあったので。
UNIXだとバイナリモードもテキストモードも同じなので"rb"でオープン
しても問題ないけど両方のモードが違ったときはまずいのかと思ってました。
>>228 じゃあバイナリモードで開けばいいでしょ・・・
>>229 いや、それだとだめってことなんですけど。
バイナリファイルの場合に。
whileとfgetcでファイルポインタを末尾までもってゆく。
>>230 「バイナリモードではfseekが正しく機能しない」?
とりあえず、、、
はつみみです
てか、困らない?
自分としては動作を保証するモードが逆だと思うんですけどね。
>>232 バイナリモードで「SEEK_ENDを指定した」場合です。
つか、
>>228 の思い込みだろ。あるいは、モードを逆に憶えているか
> 確かfseekにSEEK_ENDを指定したときはテキストモードでオープン
> しないと動作は保証されないようなことを読んだことがあったので。
とりあえず
>>228 はうろおぼえみたいだから、
SEEK_END ともう一つ別の方法でファイルサイズをとってみて、
食い違うっていう例を、自分のハードディスクの中でみつけてから
逝ってくれ
みなさん沢山のレスをどうもありがとうございます。 まずはレスの中身を理解してからレスします。 (休日出勤です。すこし寝過ぎました。)
>>238 書籍でも「C言語によるプログラミング スーパーレファレンス版」と
あと一冊名前を忘れてしまった本にも載ってました。
いまwindowsでgccでやってみたら問題なかったです。
以前 linux で libc の fopen のソースを見たら確かにモードを区別
していなかったのでそっちでは安心して使っていたんですが。
>>240 もしサポートしてなければ、たぶんエラーコードを返したりすると思うから、
それをはじけば問題ないんじゃない。まあ、まったく出鱈目な結果になるという
恐れもあるが。。
242 :
デフォルトの名無しさん :02/09/14 15:46
offsetof についての質問なのですが、 struct foo { int member; } foo; とあるのをファイルに出力するときに、 foo f; ptr = &f; len = offsetof(f, member) + sizeof(int); とやっているのがあるのですが、 これは、やっぱり構造体の padding を意識しているのでしょうか?(C FAQより) とすると、メンバーを struct foo { int member; long member2; } foo; と追加したときには、 ptr = &f; len = offsetof(f, member) + sizeof(int) + sizeof(long); とするのが正しいのでしょうか? それとも、 ptr = &f; len = sizeof(struct foo); とするのが正しいのでしょうか?
243 :
デフォルトの名無しさん :02/09/14 15:50
>>242 つまり、一番最後尾にあるかもしれない詰め物を、避けているってわけ?
だとすれば、member2が最後の要素なんだから、
ptr = &f;
len = offsetof(f, member2) + sizeof(f.member2);
こうじゃないの?最後の要素の末尾=全体の末尾
絵で描くと、 |member1|???|member2|???| (= f) これを、ファイルの中では |member1|???|member2| これだけにしたいのでは?
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Explosion.h" #include "global.h" #include "RenderTex.h" #include "debug.h" #include "RenderSprite3.h" #include "d3dutil.h" #include "sndset.h" #include "sndid.h" #include "TexSet.h" #include "particle.h" #include "sub.h" #include "debug.h" USE_TR; //--------------------------------------------------------------------------- #pragma package(smart_init)
//--------------------------------------------------------------------------- // 爆発・抽象基本クラス //--------------------------------------------------------------------------- // 爆発クラスへのCasterを返す (DeleteClass用) //static const LAppCaster<CExplosion>& CExplosion::Caster() { SV static LAppCaster<CExplosion> c; return c; } // cter, dter CExplosion::CExplosion() :CAppObj(g->appMan) { SV } CExplosion::~CExplosion() { SV }
//--------------------------------------------------------------------------- // 普通の爆発 //--------------------------------------------------------------------------- static const intTEX_NUM = 9, TEX_NX=999; static const CPointTEX_POS(0, 0); static const CSizeTEX_SIZE(54, 54); static const floatANIM_TIME = FPS30*4.0f; CNormalExplosion::CNormalExplosion(const CVector3& pos, float size) :CExplosion(), mTime(0.0f), mIndex(0) { SV mSpr.pos = g->camera->Proj2D(pos, 640.0f, 480.0f, P2D_CENTER|P2D_CENTER, TEX_SIZE.cx*size, TEX_SIZE.cy*size); mSpr.scale = CVector2(size, size); mSpr.tex = g->texBomb; mSpr.rect = CRect(TEX_POS, TEX_SIZE); g->renderSprite->Add(&mSpr);
>>246 C++はスレ違い。それ以前に、長いソースはうpしろヴォケ
for (int i=0; i<20; i++) { float cr, cg, cb; // 一定の確率で、真っ白の火花 if ( g->rand(100) < 10 ) cr = cg = cb = 1.0f; else // それ以外は適当な色 cr=frand(0.7f,1.0f), cg=frand(0.7f,1.0f), cb=frand(0.0f,1.0f); CParticle::New(pos, 1.5f, 0.4f, CVector3(-15.0f, -15.0f, -15.0f), CVector3(+15.0f, 15.0f, 15.0f), CVector3(1.0f, 1.0f, 1.0f), CParticle::Tex(CParticle::WHITE), 0.5f, cr, cg, cb ); } g->sysSnd->Play(SE_HIT01); // 爆発音 }
>244-245 あーなるほど。最後の詰め物だけを除いているわけですか。 ふむふむ。そうかそうか。 ところで、こういうコーディングって一般的なんでしょうか? いや、今回初めて見たんですけども、 最後の詰め物_だけ_を取ってる、ということは、 メンバーが増えれば増えるほどその意義は小さくなりますよね? んー、やってることは分かったけど、 意図しているところが全然分からんちーん。 他の構造体では sizeof(struct bar) とかやってるし。
まあ、構造体をそのままの形で保存するって事自体、 あまりよくないと思うけどね。面倒でも適切なバイト列に変換する 手続きを書いた方がいいかと
確かにそうですよね。 ただ、既存のものと整合性を取らないといけないので、ちょと大変。 もうちょっと考えてみます。ありがとうございました。
254 :
デフォルトの名無しさん :02/09/14 17:39
みなさんは数値を一定の範囲でループさせたいときってどうしてますか? 私は、一回のマイナス方向の変化量が、変化量の最大を超えないっていう前提で a = (a + max) % max; ってしているのですが、もっといい方法はありますか?
これって動くか? a = (0 <= a) ? a % max : max-1 - ((-a) % max);
あ、なんか勘違いしてる
a=(a<min ? a+max:a); は恥ですか?
割り算使ってないから自分としてはまぁまぁかなと
>>256 が動きますた。これは変化量に制限がないから、安全といえば安全かな。
261 :
デフォルトの名無しさん :02/09/14 17:56
DLLを使ってデータ圧縮したいんですけどやり方がわかりません 教えてください googleでは調べたんですけどね…
いや、まてよ?何か間違っているような気がする
質問です 以下において x = 式(1) || 式(2); 式(1)または式(2)の結果が0以外であれば他方が評価されないのは 処理系依存でしょうか
★誰でも出来る!!お小遣い稼ぎ★
■PC初心者でも出来ます■
■ 仕事は、宣伝のみ!■
PCでのメール・掲示板の書き込みetc....
あなたしだいで50万以上も可能!
即日スタート可能!
収益100%ひとり占め!
まずはメールでお申し込み下さい。
[email protected] 担当TSJ/霧生
>>263 その話、昨日か一昨日どっかで出たばっかりだ。
>>263 左から右だけど処理系依存ではないと思う(たしかANSI
ショートサーキット
x=でしたね
>>254 わかった、こうこう:
a = (0 <= a) ? a % max : max - 1 - ((-a - 1) % max);
実行例:(max=10の場合)
14
==> 4
1024
==> 4
-1
==> 9
-10002
==> 8
そーいえばifネストしないとまともに動かないのはVCだけ?
a = (0 <= a) ? a % max : max - 1 + ((a + 1) % max);
>>270 はこっちのほうがキレイかな
a = (0 <= a) ? a % max : max - 1 + (a + 1) % max; カッコいらないや
274 :
デフォルトの名無しさん :02/09/14 18:47
>>263 A 申し訳ございません。文化についてはあまり知識がありません。
275 :
デフォルトの名無しさん :02/09/14 18:51
>>271 >>39 A. そういう言葉は好きではありません。アイフルのサイトやサービスについてご質問はございますか?
みなさんレスありがとう。
>>256 マイナスの値に対して % 使ったときの結果って処理系依存じゃなかったですっけ?
私の勘違いかな?
>>258 割り算よりも条件分岐によるパイプラインの乱れの方が
実行時コストが大きいような気がするのは
私だけでしょうか?
>>276 > 私だけでしょうか?
私も同感です。ハイ。
maxが 2の累乗で表せる数なら a &= max - 1; がいいかもしれないね。 勘違いしてたらごめん。
>>277 ですよねー
>>278 たしかに2の累乗ならビット演算の方が速そうですね。
>>279 その昔VB厨だった頃、(別の問題で)「そこまで気にするならVB使うな」
と言われて C 系言語に乗り換えたのですが…。
私はこのまま汗使いになるしかないのでしょうか?
関数も呼び出し時のオーバーヘッドが気になるから使わないとか言い出すんだろうか。
>>276 > マイナスの値に対して % 使ったときの結果って処理系依存じゃ
おうそりゃ初耳だな。んじゃ
>>270 で
>>282 >私はこのまま汗使いになるしかないのでしょうか?
なれ。
>>281 ハア?
実行速度を気にするヤシはCを使うなと?
画像操作とか、データ圧縮とかのソースなんかも
全部アセンブリ言語で書かれていると?
すごい世界だな。
>>283 速度的に最適化すべきところはCでも当然気にして作るし、
気にせんところでは関数呼び出しのコストも気にせん。
まあ初心者スレで言っても無意味か。
287はインラインアセンブラとかしらんのだろうか。
>>285 Cにはインラインないから・・・
オーバーヘッドが気になると言うなら、
やっぱ、すべてmain関数に同じような処理でもすべて書いて、
main関数は数万行突破となるのかな?(w
利点を欠点と考えるのは間違ってると思いま〜す。
最適化は実行速度が気になってから初めて考慮に入れてください。
292 :
晒しage :02/09/14 19:37
>>289 287はインラインアセンブラとかしらんのだろうか。
(プププッ
最適化はコンパイラにまかせておけ
>>289 > 287はインラインアセンブラとかしらんのだろうか。
(ぷっ!
多分コストがかかるから嫌だと言っている人はネタだと思うんだけど、 そんなに気になるものなの?
インラインアセンブラは別にいいじゃん。使いたきゃ
>>296 だから問題はそのコストをどこにかけるかってことだろ?
300 :
デフォルトの名無しさん :02/09/14 20:04
すみません、質問させてください。 a = (char *)malloc(30); b = (char *)malloc(30); strcpy(a, "abcde"); strcpy(b, "ABCDE"); a = b; と、こうした場合、最初のaの値のメモリは自動開放になるのでしょうか? リンク切れの状態でメモリに存在するんでしょうか?
> リンク切れの状態でメモリに存在するんでしょうか? の方が正しいです。
>>300 C に「自動開放」なんて期待するなよ。
303 :
デフォルトの名無しさん :02/09/14 20:11
>>301-302 やっぱり、そのままメモリに残るんですか・・・。
ありがとうございました。
>>300 それで解放されるんならfreeは要らんな・・
少し上で処理速度うんぬんでアセンブラ使えだのインラインアセンブラがあるだのといっているが、 それが必要になるほどきちんとしたアルゴリズムを採用していてそれをきちんとソースに落とせているレベルの 人間の会話とは思えないんだが。
306 :
mukku :02/09/14 20:28
ほとんど初心者なんですが MS-DOSからワードパッドを呼び出すのは どうやったらいいんでしょう(爆) notepadしか使わないもんで ほんとに初歩的な質問で気を悪くされたら ごめんなさい
cd C:\Program Files\Windows NT\Accessories wordpad
308 :
デフォルトの名無しさん :02/09/14 20:38
>>306 まあ好みだろ。自分でわかりやすけりゃそれでいい。
309 :
デフォルトの名無しさん :02/09/14 20:43
>>306 , 308
このつながりがさっぱりわからんのだが?
>>306 >>308 2chのスクリプトの混乱か?
main () {
int ret = system ("\"C:\\Program Files\\Accessories\\WORDPAD.EXE\"");
printf ("ret = %d\n", ret);
}
そうでもないよ system ("ワードパッド");
C:\WINDOWS>write <リターン> つーかネタにマジレスはイタイ。
俺、思うんだけどよ。 ネタ披露するなら、面白くなくっちゃダメだと思う訳よ。 で、笑えねーし、ジョークなのかマジなのかわからねーようなネタは、 ただの糞レスだと思う訳よ。 マジだと思って、ちょっとレス入れたら、「ネタにマジレスするな」とか言われると、 「マジレスされるようなネタかましてんじゃねーよ!」って思う訳よ。 ネタにマジレスするのが痛いんじゃなく、 マジレスされるようなネタが痛いと思う訳よ。
質問です。 int *hoge; のように宣言すると、これはintへのポインタ型の変数hogeというわけですよね? では、これを int *hoge="チンカス"; と書くと、これは配列になりますよね?なぜですか? しかも、hoge[2]のように変数hogeを使えますよね。 ポインタなのに、なんで配列と同等に扱えるのですか?
>>315 これしきのネタを見抜けないお前の方がイタイ。
でも半分同情する。正直でいい人なんだろうなと。
>>316 ワーミングが出たYO?
_a.c: In function `main':
_a.c:3: warning: initialization from incompatible pointer type
> ポインタなのに、なんで配列と同等に扱えるのですか? それがC言語の仕様だからです。としか答えようがありますまい。 配列は式内でポインタに成り下がります。 とどのつまり、char配列 → char*と解釈され、 それを(キャストを怠りながらも)int*に代入 しているのであります。 > しかも、hoge[2]のように変数hogeを使えますよね。 これではバッファオーバーランとなりますまいか?
>>315 そーゆー話は他所でやって下さい。つか、1byteカナ多すぎてうぜぇ。
>>316 あなたが使っているコンパイラに興味があります。
ふつー
>>318 の様に、怒られる筈ですが…
コンパイラはSC使っています。
C言語勉強のおもしろいサイト知りませんか?
scってなに? Symantec Cとか? 過去の遺物じゃん
はるか昔の16です。
42さんが教えてくれたことを中心にポインタを勉強し直して
書き直すこと7時間余、ようやく正常に動いているらしきソース
ができました。
>>112 さんの御指摘と42さんのコメントを基に、だいぶ速度も
あげることができました。(処理する内容は
(128+26)*(26+40)*12*24*98個と6400*30個のデータのマッチング
なので速いほうが助かります。)
我ながら意味不明の箇所も多いのですが、また整理して質問いた
します。
皆様ありがとうございました。
> (128+26)*(26+40)*12*24*98 =286868736 なんかとんでもねェなオイ
ウォーニング ワーミング 全然違うのに何故話か話が通じるという… 余談だが、インラインアセンブラじゃなくインラインアセンブリじゃないの?
>>331 インラインアセンブラ→インラインのアセンブリ(言語)を
翻訳するための機能(道具)。
こんなところでよろしいか?
全言語のページから"inline assembler"を検索しました。 約12,900件中1 - 10件目 ・検索にかかった時間0.04秒 全言語のページから"inline assembly"を検索しました。 約12,800件中1 - 10件目 ・検索にかかった時間0.09秒
335 :
デフォルトの名無しさん :02/09/14 23:19
ちっちぇーなー、
確かに検索してみると「インラインアセンブリ」より「インラインアセンブラ」の方が多いが
そもそも「アセンブリ」より「アセンブラ」の方が圧倒的に多いという罠があるからなぁ
>>333 もいまひとつ納得できん
英語じゃどう表現してんのよ?
オンラインハンドアセンブルサーバー
>>334 なるほど。つまりインラインアセンブラ/inline assemblerが多数派だと…
assemblyというのが、そもそも名詞として用いにくい 理由があるんじゃないの。某宗教関係とカブってたり
ウォーニングムスメ
ウォ娘。?
>>337 ごめん。英語は疎いのでパス。
つーかそんな細かいこと気にすんな。
ハッカーとヒッキーほどの違いはないだろ。
void a( KOU Kou ) { free(Kou.lpNum); } アドレスを渡していない場合で,変数のポインタを開放したらどうなりますか?
解放されるだけ。 たとえ構造体をポインタ渡ししても同じこと。
そりゃそうだ
書き忘れです 関数に,構造体をポインタで渡さない場合で, その構造体のポインタ変数を開放しようとしたら出来ますか? こういう場合,構造体は,ポインタで渡したほうがいいですか(ポインタ変数以外値を変える気がありません)?
>>349 構造体のアドレスを渡さなければ、元の構造体の内容を変えることができない、
て事はわかってるのか?
「構造体のポインタ変数」ってのは、メンバ(lpNum?)の事だよな
>>349 もっと具体的に書いてくれないとわからないよ。
>>346 ポインタのような複雑な内容をもった構造体を、
そのまま引数で渡すって事自体、かなり異常だから、
たぶん考え方が完全に間違ってる
構造体のアドレスを渡さなければ、元の構造体の内容を変えることができない、 て事はわかってるのか? わかります 「構造体のポインタ変数」ってのは、メンバ(lpNum?)の事だよな そうです
354 :
デフォルトの名無しさん :02/09/15 00:31
僕は作りたいものがあってC言語を勉強してきました。 文法はほぼ完璧になったのですが作りたいものが作れません。 そこで皆さんのアドバイスをいただきたく書き込みさせていただきました。 僕が作りたいと思っているものはTVの画面をリアルタイムで変更して表示を変えるというものです。 でもこれからなにを勉強していっていいかわかりません。 アドバイスをお願いします。
> わかります ホントか?例えば、これ↓では、呼び出し側の構造体の lpNum にNULLが入らない。 void a( KOU Kou ) { free(Kou.lpNum); Kou.lpNum = NULL; }
そしてこれ↓なら、入る。 void a( KOU *pKou ) { free(pKou->lpNum); pKou->lpNum = NULL; }
わかるよ
あ,つーことは,NULLいれるためにはポインタで渡さんといけんね
>>354 > TVの画面をリアルタイムで変更して表示を変える
例えば?ビデオジョッキーみたいな?
>>354 おそらく、ビデオキャプチャのデバイスを叩くことになると思うので
お使いのOSの関連API群を調べたりサンプルを実行してみるといいでしょう
WindowsならVFWあるいはDirectShow
Linuxならv4l(video for linux)
MacならQuickTime? よく知らない...
などなど。画面への表示は書籍などをあたればよいと思います。
>>354 それってC言語じゃないとできないのかな。もっとまともなツールがあるような気が。
まあアリモノではいろいろ制約があるだろうけど
>>349 > こういう場合,構造体は,ポインタで渡したほうがいいですか
どういう場合でも、普通、構造体はアドレス渡し。
内容を書き換えられたくなければ、引数を const で修飾。
363 :
デフォルトの名無しさん :02/09/15 00:49
typedef struct { int i; } SUPER_INT;
俺は放置プレイかよ
>>362 const について誤解があるようですね。
>>362 呼び出された側では内容を書き換えるけど、
呼び出し元にそれを反映したくない時は
どうすればいいですか?
メンバを1つずつ仮引数に書き並べるべきですか、
それともアドレスで渡した後、呼び出された側で
複製すべきでしょうか?
368 :
デフォルトの名無しさん :02/09/15 01:04
struct{ char *p; ... }test; t.p=malloc(....) ... func(t); ... func(struct test t) { free(t.p); } こういう場合はポインタ渡しでなくてもで解放される。
>>366 えっと思ってやってみたら、警告が出るだけ。。そうなのか。。ショボーン
struct foo {
int bar;
};
void inc_bar (const struct foo *p) {
p->bar++;
}
main () {
struct foo a = { 123 };
inc_bar (&a);
printf ("a.bar = %d\n", a.bar);
}
>>367 どうだろうな。やっぱりアドレス渡しなら複製もできるわけだし、
自由度が高いと思うが。アドレスの幅がオーバーヘッドになるかもしれないし。。
とにかく、引数のサイズはバカでかくするべきではない。
>>368 それガイシュツ
×アドレスの幅がオーバーヘッドになるかもしれないし。。 ○アドレスの幅がオーバーヘッドになるかもしれないが。。(大した事はないだろう)
374 :
デフォルトの名無しさん :02/09/15 01:12
*(&(*(&(*(&(*(&p)))))) = 1;
375 :
デフォルトの名無しさん :02/09/15 01:13
>>367 caller:
type_hogera data1, data2;
data2 = data1;
modifier( &data2);
int modifier( type_hogera *tekito) {
tekito->hoge = ...;
return 0;
}
>>369 はあ?
>>370 マッ マジっすか?
>>372 参照渡ししてから複製するくらいなら
はじめから値渡しする方が一度の処理で済んで
効率的だと思うのは間違いですか?
>>375 pushとは構造体の値渡しのことを指しますか?
それとも仮引数を1つずつ書き並べることを指しますか?
それとも内容を一時退避して復元することを指しますか?
>>376 modifier側で複製せずにcaller側で複製する意図は何でしょう?
寿命はmodifier内で完結させた方が得策ではないでしょうか?
>377 376 はネタ
>>379 ありがとうございます。マターリ読んでみました。
ここの皆さんの回答は「何がなんでもアドレス渡し」でほぼ一致、
しかしリンク先の記述では
「構造体の値渡しを使うこともためらう必要はない」(ANSI C)
と書かれているように解釈しました。
一体どうすれば...
>>380 じゃいいんじゃない、ためらわなければ
というか本当は、実際に複製する必要があるのかどうか疑問だったりする
Aという関数にポインタで,値を渡します Aという関数で,Bという関数を呼び出します Bという関数には,引数として,値を渡します Aという関数では,*を使ってBに引数を渡すんですが, 普通,引数渡すのに,*を使いませんよね?
おっと脊髄反射しちった
こうかい A (Foo *foo_p) { ... B (*foo_p); ... } B (Foo foo) { ... } まあ、ポインタに統一した方が美しい、とは言える罠
>>381 ありがとうございました。
臨機応変ということでもよさそうですね。
> というか本当は、実際に複製する必要があるのかどうか疑問だったりする
たまにそういう場面に出くわします。
たとえば64ビットや128ビットの整数を扱う時などです。
(64ビットは拡張機能でサポートするコンパイラも多いみたいですね)
387 :
デフォルトの名無しさん :02/09/15 02:36
ユーザー定義型、配列に限って言えば*で渡すのが吉。
>>388 基本型の反語の意味で使ったんだが。
VBのユーザー定義型は参照渡しみたいだな。
>>387 ずばり、あなたの言うユーザー定義型とは、「構造体」のことですな?
意味上ではtypedefが合っているけれど、実体がintとかdoubleだったら必要な時以外アドレスわたしなんてしないし・・・
392 :
デフォルトの名無しさん :02/09/15 13:50
>>387 というか、配列はどう頑張っても値渡しはできないのだが。
>>391 typedef unsigned char UBYTE;
UBYTE b;
とかしてるときにbを常にアドレス渡しするメリットはないわけで。
>>392 > 配列はどう頑張っても値渡しはできないのだが。
構造体に入れろ。
hoge (hoge[0], hoge[1], hoge[2], hoge[3], hoge[4], hoge[5], ........);
396 :
60cm浮き上がるストレート :02/09/15 18:32
下の4つについて機種、OSなどの違いにより 動く動かないがあるのなら、どなたか教えてください。 また何かが付属していないと動かないとかなら、 その付属品があるかないかの調べ方を、どなたか教えてください。 1、VisualC++6.0で作ったC言語のexeファイル 2、1のプログラムの中のエスケープシーケンス 3、1のプログラムの中のwindows.hによるDOS窓へのドット表示 4、1のプログラムの中のwinmm.libでの音楽
>>396 exeファイルがOSの壁乗り越えるならjavaは何ですか?
csvファイルの、例えば列がBで行が2の所のデータを参照したい時には どうしたらいいのでしょうか。教えてくださいませ。
.NET CLRの実行ファイルなら、.exeでも壁乗り越えますが何か?
401 :
60cm浮き上がるストレート :02/09/15 18:51
>>396 へ付け加え
僕のパソコンで作ったexeを別のパソコンで使った場合。
2は僕の知り合いの方のパソコンでやった場合、\x1b[3;3H
等がそのまま出てしまうらしいです。
>付属品があるかないかの調べ方 列挙してください
405 :
60cm浮き上がるストレート :02/09/15 19:11
アカデミーパックのVC買うときに作ったアプリの再頒布は駄目ですよ って言われたことあるけどそれはどうよ
別にいいんじゃないの?再頒布するときに何買おうが
>>408 アカデミーパックは学術用に安くしてるから
頒布を考えてるならスタンダートエディション以上を
買って下さいってその店員に言われましたが
漏れは騙されたのか?
>>409 間違えた。再頒布するアプリを作るときに何を買っていても
かまわないんじゃないだった。
騙されてる。 .NETは知らないけど、6.0までのアカデミックは 再頒布しようが問題ない。 勿論有償のソフト開発でも。
>>411 アカデミーパックで作ったアプリを再頒布するとMSに訴えられますか?
アカデミックは販売対象を制限しているだけで、 ライセンス自体は各エディションに従います
>>414 407を読み間違えてた。
アカデミーパックのVC買うときに「作ったアプリの再頒布は駄目ですよ」
って言われたことあるけどそれはどうよ
ではなくて
「アカデミーパックのVC買うときに作ったアプリの再頒布は駄目ですよ」
って言われたことあるけどそれはどうよ
このように読んでしまってた。すまんです。
417 :
60cm浮き上がるストレート :02/09/15 19:31
よくわからないのですが
>>396 の1〜4以外に
なんか必要なものがあるのでしょうか。
頒布のことについて書いてありますが、動作する以前に
権利のこととかについて書いているのですか?
>>396 俺はFreeBSD使ってるけど、そこでも動くようにしてくれ。
OSが違うだけだぞ。
>>412 そうだったんだ・・・
じゃあ商売してもいいわけか。卒業したらだめだったりして・・・
俺、卒業後にアカデミーパックで商売しちゃった。 ある小さい会社の顧客管理システム。大丈夫かな。
LPCTSTRって使わないほうがいいですよね? 今使っているんですが, 全部const char*に置き換えた方がいいですよね?
>>423 WindowsのAPIと関係ない部分ならな
427 :
デフォルトの名無しさん :02/09/15 20:36
俺もC言語をマスターしたいと思ってるんだけど まずどんな本を買えばいい? あ、今はC言語初心者。
>>424 文字配列(というのか?文字列へのポインタかな)を渡して,
それ使って表示しています
>>429 WindowsのAPIに渡す値なら、そこに指示された通りの型名を使え。
Windows特有の話題は余所でたのむ
BOOLって使わないほうがいいですよね? 今使っているんですが, 全部intに置き換えた方がいいですよね?
>>432 WindowsのAPIと関係ない部分ならな
ブルッ
>>432 enumでも#defineでもかまわんから使え。
>>435 typedefなのでenumか#defineに直すべきでしょうか?
どれでもいいのではない? C99には _Bool 型があるね。
enumってなに? c++でよく見るけど,Cでも使えるの?
もともと C にあった。
>>437 _Boolってまたパッとしない型名だね。
過去の資源との互換性の問題があるからかな。
_Boolも別名を定義して使うのが主流になりそうな予感。
441 :
デフォルトの名無しさん :02/09/15 21:05
>>439 structとenumはC++じゃないと使えないぞ
>>438 列挙型も書いてないようなテキストは直ちに焼き捨てること
443 :
デフォルトの名無しさん :02/09/15 21:05
>>438 列挙
constはC++から流用(?)したんだっけ?
_BoolじゃなくてC++と同じboolじゃだめなのだろうか・・・
445 :
デフォルトの名無しさん :02/09/15 21:08
>441 (゚Д゚)ハァ?
明らかにネタだけど、C++じゃstructは使わないよな。
structもあかんと
>>449 C++でstruct使うことあるの?
classとはデフォルトのアクセスレベルが違うという程度でしょ?
>>444 ああそうか。確かにboolでよさそうだよね。
何で_Boolなんて名前に決まったんだろう?
C++のboolとも型の規格が異なるということかな?
C++でも関数の引数にするとか、fread、fwrite で読み書きするときに あえて struct 使ってる。
関数オブジェクトとかtraitsとかを書くときはstruct使わない?
# つーかスレ違いスマソ
>>451 typedef int bool;
とかやってた既存のコードを壊さないように、ということではないかなぁ。
「アンダーバー+大文字」で始まる名前は処理系側に予約されてるから、
_Boolならその危険が少ないので。
>>453 それは440でも書いてるけど、
確かに現状ではC++との互換を意識して書かれている
コードなんて少数派だろうから、その通りだね。
CとC++を混同して考えない方がいいということか。
ありがとう。
455 :
デフォルトの名無しさん :02/09/15 21:48
_+大文字ってつかっちゃいけないんだよな・・・・ 最近知った。 どうしよう。当然の如く使っていたよ(おろおろ)
ところで「置換」は「ちかん」なのか? どう考えても「おきかえ」だと思うんだけど?
>>457 理科でなんとか置換法なんてのがあって
そのとき先生は激しく「ちかん」と逝ってたのを思い出した
というか常識だろ
おっと誤解のないようにいっておくが「ちかん」が常識ね
さすがに口頭では誤解を与えやすいから 「ちかんしろ」とは言わないだろうがな(w
>>458 あーやったね、上方置換とか下方置換とか。
464 :
デフォルトの名無しさん :02/09/15 23:26
ちかんで正しいぞ。国語辞典みろ
カミカタオキカエ
クニガタリコトバノリ
467 :
デフォルトの名無しさん :02/09/15 23:41
Solarisで以下のコードを書くと、バッファオーバーランになりますか? char buf[1024] sprintf(buf, "%s%s", getenv("LOGNAME"), getenv("DISPLAY");
getenvしてからメモリ確保すればいいじゃん。アフォですか
ほんとだ
471 :
◆pavzJkL2 :02/09/15 23:49
/* 最大値と最小値を求めるプログラム */ #include <stdio.h> main() { int a[10]={59,20,504,69,333,98,246,352,111,423}; int b,max,min; for(b=0;b<10;++b) printf("%d ",a[b]); printf("\n"); max=a[0]; min=a[0]; for(b=0;b<10;++b){ if(max<a[b]) max=a[b]; if(min>a[b]); min=a[b]; } printf("最大値=%d 最小値=%d\n",max,min); return 0; } なんとなく違うのはわかるのですが、教えてください
if ( a == b ) return true; else retrun false; と if ( a == b ) return true; retrun false; は、コンパイラで最適化されちゃうような差ですか?
473 :
デフォルトの名無しさん :02/09/15 23:53
略 max = min = a[0]; for(b = 1 ; b < 10;b++) { if(max < a[b]) max = a[b]; if(a[b] < min) min = a[b]; }
>>472 自分のコンパイラでアセンブラして確認してください。
>>472 何故 return a == b; と書かないんだろう...。
477 :
471 ◆pavzJkL2 :02/09/16 00:03
>>473 ありがとうございます。即行で答え出ました
もうちょっと考えてみます
478 :
デフォルトの名無しさん :02/09/16 00:06
このパターンで最大最小求めるだけなのにこれ以上何かいい方法があるとは思えんのだが。
>>478 最大値より大きい時は、最小値との比較は不要だから...
if(max < a[b]){
max = a[b];
} else if(a[b] < min){
min = a[b];
}
とすると、ちょっと速くなるかも...。
480 :
471 ◆pavzJkL2 :02/09/16 00:15
>>480 if(min>a[b]);
min=a[b];
セミコロンが余計
483 :
471 ◆pavzJkL2 :02/09/16 00:21
if(min>a[b]); ←ここにセミコロンあるけれど大丈夫???????? min=a[b];
初心者質問で申し訳ないんですが for(〜;〜;++i) と for(〜;〜;i++) が変わらない時があるのは何故ですか? 継続判定の前か後ろだから明らかに違うはずなのに VC5はくそですか?
a += f() -@ において、f()の結果がaの値を変える場合、 加算されるaの値は変わる前と後のどちらになるかは 処理系依存でしょうか。 @が a = a + f()-A と同じであればaとf()の評価順は処理系依存だと K&Rに書いてあるのですが、 @とAは全く同じではなさそうですし、、
?
前置インクリメントでも後置インクリメントでも変わらなくない?それ?
>>489 継続判定〜とか書いてた本のほうがくそだったんですね
ありがとう
for(初期設定;継続判定;増分) 文〜; 初期設定=>継続判定=>文=>増分=>継続判定=>文=>〜〜 の順でしょ?
>>491 初期設定=>増分=>継続判定=>文=>増分=>継続判定=>文=>
か
初期設定=>継続判定=>文=>増分=>継続判定=>文=>
となるって本に書いて(そう解釈させる文)あったんですが
493 :
デフォルトの名無しさん :02/09/16 00:46
>>492 それってさ、条件式の中に++、--を使った場合の事じゃないか?
for (i = 10; 0 < --i; ) と
for (i = 10; 0 < i--; ) の違いとか
>>494 そのころは工房っだったんで覚えてませんが
今その本捜してみます
#define N 10 unsigned i; for (i = N; 0 <= --i; ) 昔ハマった無限ループ・・・我ながらアフォであった for (i = N; 0 < i--; ) やるならこれ↑かな?
for (i = N - 1; i <= N; i--) // こういう手もあるか
見つかりませんでした
>>494 だったのかもしれません
↑ 何いってんの?
void a(const int *n); void b(int *n); aからbを呼び出す時に,そのまま渡したら,constつけろよと言われたので,うっかりしちゃったと思ってつけました void b(int n); だったら,文句言われない?
>>501 なにそれ。配列じゃないintをアドレス渡ししてたってこと?
Aではintを変えたいんだけどBは変えなくていいってこと?
>>501 void a(int *n);にすればいいと思うが・・・
>>504 そうだったconstついてたんだ
ネタ?
やれやれ
>>501 どうしてもconstにしたいんだったら、呼び出し時にint *にキャストしろ。
しかしなんのためのconstなんだろ・・
ヘッダの先頭に次の行を追加。 #define const
ひとつのヘッダーファイルにexternを集めて, 全部の.cppファイルでインクルードするのって普通?
追記 変数にexternつけてですね
512 :
デフォルトの名無しさん :02/09/16 05:05
strncmpとmemcmpの違いってなんですか?
>>512 "a\0b" と "a\0c" が一致するかしないか。
>>510 集めるほどグローバル変数を使わないのが普通。
>>513 strncmpだと一致するけどmemcmpだと一致しないってこと?
>>515 聞いてばかりいないで自分で実際に確かめろ。
> 全部の.cppファイルでインクルードするのって普通? 全然普通じゃない。スレ違い。
518 :
デフォルトの名無しさん :02/09/16 08:25
>>475 >>472 のこのプログラムの断片では、
true, false が
それぞれ1, 0 ではないのかも。
>>518 ああなるほど...って、もっと嫌じゃん。
520 :
デフォルトの名無しさん :02/09/16 10:27
データの保存についてなのですが、 for(i=1;i<=n;i++){ fprintf(fxy,"%f %f %f %f \n",a[i], b[i], c[i], d[i]); } みたいにして、a,b,c,dの値がそれぞれエクセルの別の枠に自動的に 入るようにしたいのですけど、どうすればいいでしょうか?
>520 csv形式?
>>520 カンマで区切って書き出して、
エクセルでCSV形式としてインポートすればいいよ
レスありがとうございます。 すみませんが、CSV形式というのが良く分からないのですが、 具体的にはどういう風にすれば良いのでしょう? カンマで区切って書き出すというのが良く分かりませんので お願いします。
拡張子を.cvsにして、できたファイルをダブルクリックしてみろ。
間違えた。csv。メンゴ。
526 :
デフォルトの名無しさん :02/09/16 10:40
すっごい基礎であれなんすけど char *String; char *stop; stop = String + strlen( String ); strlenってint返すと思うけどこういうのはどういう意図なんすかね?
for (p = String; p <= stop; ++p) ってやりたいんだろ。他に解釈しようもないと思うけど。
>>526 Stringの指す文字列の終わりを示すヌル文字、
そのアドレスをstopに入れたいのだと思われ。
その用途は分かりかねるが。
529 :
デフォルトの名無しさん :02/09/16 10:46
1234567890を1,234,567,890のようにカンマ付けするのに ベストだと思う方法を教えてください。
530 :
デフォルトの名無しさん :02/09/16 10:47
>>526 Stringの終端文字(='\0')の位置を調べて、そのアドレスを stopに代入。
つまり、Stringの終了アドレスを求めていると。
>>529 C言語以外の言語を使うのがベスト。なんて答えじゃだめ?
532 :
デフォルトの名無しさん :02/09/16 10:48
私の使ってる Linux 上の glibc (になるのかな ?)では BIG_ENDIAN, LITTLE_ENDIAN, BYTE_ORDER がdefine されているので, ソースで使えないのですが, 規格としては, 規格で定められているものをつぶさない限り, 処理系が独自のマクロを提供するのは自由, ということになっているのでしょうか.
ていうか、 char *p; p = String; whille(p != '\0'){ /* … */ p++; } とかじゃ駄目なんだろうか…
>>529 後ろから3文字ごとにカンマを挿入するだけだろ。
>>532 だめ。だって
while (*p != '\0')
だも〜ん。
>>535 そうですね。わたしが馬鹿でした。
ていうかやったら人生終わる…(氏
>>533 開始アドレスと終了アドレスを必要とするライブラリ関数に渡すつもりかもしれない。
>>537 そういう処理だと確かにポインタ演算が一番速いですね。
539 :
デフォルトの名無しさん :02/09/16 10:59
ああ、なるほどーーー>527 >528,530 わっかりました。でも、 strlen( String);である必要ってあるの? ~~~~~~~~~~~~~~~ ちなみに文字列置換する用途で検索してたら こんなコードが多くあったもんで。 >533 たぶん。ポイントで終端アドレス知りたいんだとは思いますが。
説明不足でした。 整数を表示する際に、3桁毎にカンマ区切りを付けたいとします。 例えば 12345 なら 12,345 と。 それを行うのにベストな方法を教えてください。 単純な除算とstrrevを使った方法は知っているので、出来ればそれ以外を。
> strlenってint返すと思うけど そうなのか?知らんかった。
542 :
デフォルトの名無しさん :02/09/16 11:04
size_t?ってつっこみたいの?
>539 あ。なんか分かった気がするので取り下げ
>>532 処理系独自のマクロ一覧がドキュメントに書いてあるはずだよ
ぶつかるのは仕方ないんじゃない
ENDIAN云々はglibcじゃなくてglibのような気もするが
546 :
デフォルトの名無しさん :02/09/16 11:14
>>540 ベストって、なにを評価してベストなのか?
処理時間なのか、移植性なのか、コードの量なのか?
面倒だったらとりあえずprintfで何とかならないか調べろ。
size_t BCCの場合、<stddef.h>から辿っていったところ <_stddef.h>内にある typedef unsighned int size_t から、unsighned int になるっぽいのかな? コンパイルのオプションで変わるのかもしれんけど。 まあ環境に依存するということなんだろうか。
unsighned?
typo?
>>548 うぇーん、またミスったみたい。
×unsighned
○unsigned
ですた。
もうだめぽ…
size_tがunsignedで迷惑こうむった人の数→ というスレを立てていいですか?
>>510 見て気になったのですが、
ひとつのヘッダーファイルに関数のプロトタイプ宣言を集めて、
全部の.cファイルでインクルードするのって普通?
そのヘッダファイルを編集すると、全部の.cをmakeしなおさないと駄目になるような
気がするのですが。
>>552 サイズって自然数であるはずだけど不都合あった?
K&R読み返してみたところ、 「厳密に言えば,size_t は符号なし整数値を作成する」 と書いてあったよ。 これはデータの意味を表す為に 型定義を行ったと考えるべきなんだろうかな。
555 :
デフォルトの名無しさん :02/09/16 12:01
1<x<2,2<x<3のそれぞれの範囲で関数f(x)が定義されていて 同時に両方の範囲で関数のグラフを表示させることできますでしょうか?
556 :
デフォルトの名無しさん :02/09/16 12:02
関数へのポインタ? 同時に、って?
551はintを単純にsize_tに置換したクチだろ
>>557 1<x<2,2<x<3のそれぞれの範囲のグラフを
両方表示するってことです。
>>560 ええ、どうぞ表示してください。としか言いようがない。
C言語の仕様見れば出来るか出来ないかは自明だと思われ。
>>545 どうもありがとうございます.
ただ BIG_ENDIAN は BIG_ENDIAN だからなあ, 発想が貧しい私には
代わりのいい名前が思い浮かばん ...
>>552 あまり普通では無いと思う。
ただ、コンパイル時間はあまり気にしなくていいと思うけど。
(1万行程度のコードなら数十秒でコンパイルできるし)
マクロだとプリフィックス付けても置換されるの? 初耳だ!
>>567 モジュール毎に分けて、ヘッダでプロトタイプ宣言しる。
>>570 いや、自分のPCだと10秒程度なんだけど、
もっと遅いマシンも現役かなと。開発用マシンなら特に。
>>571 「書籍も買えない貧乏人は麦を食え」ってことわざ知ってる?
米を麦に買えて節約しろと
575 :
デフォルトの名無しさん :02/09/16 14:57
直線 m があって任意の座標 A があるとすると、 点Aが直線mの右側にあると判定する最もよいアルゴリズムってどんなのですか。
スレ違い質問が多いなー
>>577 式の評価単位で同じ変数に二度代入が行われると
常に未定義か不定かだったと思う
>>577 アセンブラで書ければ理解できると思います。
この際、アセンブラに挑戦してみては?
多くの疑問が多々解決しますよ。
a += f() は a = a+f() と同じさ。
>>580 結局はコンパイラが同じにしちゃうんですよね。
int a, b; int f() { ++a; return a; } int g() { ++b; return b; } main(){ a += f(); // 1 b = b+g(); // 2 } 1と2で結果が変わるかってこと? 多分未定義(コンパイラによって結果が変わる) 仮に定義されていたとして、こんな書き方はやめて
>>577 @未定義。
AE1=E1+E2とE1+=E2の違いは、後者はE1が一度だけ評価されるということのみ。
したがって、E1が副作用を持たなければ全く同じ。
いずれにしても評価順は不定。
>>583 「未定義」は「コンパイラによって結果が変わる」という意味ではないよ。
586 :
デフォルトの名無しさん :02/09/16 16:02
先制! typedef enum{ … hoge foo bar … } hogehoge とかいう構文の意味がわかりません!中のメンバの型宣言とか見当たんないし。
587 :
デフォルトの名無しさん :02/09/16 16:02
>>585 未定義 == 定義されていない
コンパイラの製作者が独自の実装を行って良い。
という意味ではないのですか?
VCは、デバッグオプションでも変わるとかはナシですよ。
>>586 anonymous enumをその場でtypedefしてるだけ。
590 :
デフォルトの名無しさん :02/09/16 16:16
ファイルを開くのに失敗します。 FILE *fp3; fp3= fopen(Name,"r"); if (fp3 == NULL) { printf("ファイルが開けませんでした"); exit (1); } どこか間違っているでしょうか? どなたかご教授願います。
591 :
デフォルトの名無しさん :02/09/16 16:17
>>590 ファイルがない。
Nameが指す文字列を確認しろ。
あ、猫にきちんと書いてありますな。 皆さん乙〜
>>588 未定義==言語仕様にない==動作保証なし
実装依存==正しく実行され処理系ごと結果が定義される
不定==正しく実行されるが結果が特定できない
594 :
デフォルトの名無しさん :02/09/16 16:22
>>591 ファイル名を確認したらおかしな文字列が入っていました。
無事修正しました。
ありがとうございます。
>>586 平気な顔して機種依存文字使うアホです。無視するが吉。
未定義==Cドライブフォーマット可能 実装依存==表示が英語と日本語で変わるかも 不定== printf("%d%d", rand(), rand() ); ってことですか? じゃ、俺は不定といわなきゃならなかった訳だ 勉強になりました。
未定義のせいでパソコンが火を噴きマスタ。
機種依存文字? ひょっとして俺の目は節穴なのかな?
DirectXいじるようになって やっとenumの意味をしったトロい漏れ
602 :
デフォルトの名無しさん :02/09/16 17:03
これ、トリップ変換ロジックのソースらしいんだが、 これでやっていることをCプログラマに分かるように説明してくれ。 $salt = substr(substr($key, 1, 2) . "H.", 0, 2); $salt =~ tr/:;<=>?\@[\\]^_`/ABCDEFGabcdef/; $salt =~ s/[^\.\/0-9A-Za-z]/\./g; $trip = substr(crypt($key, $salt), -8);
それ、perlやろ?
605 :
デフォルトの名無しさん :02/09/16 17:19
>>603 (・∀・∀・)マァマァ、寛容な精神で。。。
.NETは?
608 :
デフォルトの名無しさん :02/09/16 20:24
>>602 perl勉強汁。
cryptのkeyからsaltを作る
変換
置換
cryptから後ろ8文字を出す。
609 :
デフォルトの名無しさん :02/09/16 21:42
>>600 え?三点リーダって機種依存文字では無いと思うのですが…
2バイトコードのことだよ。
>602 1.文字列の最後に"H."を追加し(文字列が"Aホ"なら"AホH.") 2文字目と3文字目を取り出す(上の例なら"ホH") 2.下記にしたがって文字を置換 文字コード≦0x2d '.' 文字コード≦0x39 そのまま 文字コード≦0x40 コード+7 文字コード≦0x5a そのまま 文字コード≦0x60 コード+6 文字コード≦0x7a そのまま 文字コード≧0x7b '.' (上の例なら".H") 3.作成したSltでCrypt文字列を作成し8文字を取り出す。
つーか2ちゃんのセキュリティー破ってどうする
if( x >= 0 && x <= SIZE_X && y >= 0 && y <= SIZE_Y ) は,この範囲内にあるならという条件です。 この範囲外のときは,という条件の場合 if( !( x >= 0 && x <= SIZE_X && y >= 0 && y <= SIZE_Y) ) を使いますか? それとも4つの条件が否定になるように書いていきますか? 4つの条件が否定になるように書くと,全部の条件を調べなくてもよくなりますが(場合によって), 可読性が悪くなりますよね(コメントで補えますけど)
この範囲外のときは,という条件の場合 if( x >= 0 && x <= SIZE_X && y >= 0 && y <= SIZE_Y ) ; else{ ,,, } と書く香具師もいるな。
616 :
デフォルトの名無しさん :02/09/17 00:12
617 :
デフォルトの名無しさん :02/09/17 00:13
if((x < 0) || (x > SIZE_X) || (y < 0) || (y > SIZE_Y)) 特に可読性が損なわれるとは思わないけどなぁ。
>614 俺はこう書く ( 0 <= x && x <= SIZE_X ) && ( 0 <= y && y <= SIZE_Y ) 否定の場合は状況によるが !(( 0 <= x && x <= SIZE_X ) && ( 0 <= y && y <= SIZE_Y )) こんな感じかな。好き好きだからどう書いてもいいじゃない?
>>617 一つだけ見てもわからん。
書き比べてみろ。
未満でよければ・・・ if(x/SIZE_x==0 && y_SIZE_y==0)でも可。 if(x/SIZE_x!=0 || y_SIZE_y!=0)逆
#define unless( x ) if( x ){}else
622 :
デフォルトの名無しさん :02/09/17 00:24
625 :
デフォルトの名無しさん :02/09/17 00:27
>620 x=-1 SIZE_X=2 の場合は?
627 :
デフォルトの名無しさん :02/09/17 00:29
>>625 unlessという関数だと見間違う可能性があるので却下。
>>625 少なくともperlではunlessにもelseが置ける。
よって混乱する可能性大
if( (unsigned)x > SIZE_X && (unsigned)y > SIZE_Y ) ってのはボツなのか? unsignedの部分は適当な符号無しキャストに 読み換えてくれたまへ。
あ、上の && は || の間違いね。
>629 視認性という観点から却下。
> 視認性 車の運転? (ププッ
633 :
デフォルトの名無しさん :02/09/17 01:24
イベント通知やコールバック関数の使い方等に関する分りやすい文献または インターネット上のサイトなどありませんでしょうか?
>>632 視認性の重要さをわかってないと言うことは、まだまだ厨ですな(W
#define unless(x) if(!(x))じゃだめなの?
637 :
デフォルトの名無しさん :02/09/17 01:26
ネタは無視。
639 :
デフォルトの名無しさん :02/09/17 01:30
>>638 ネタじゃないっす。ちなみに637は私ではないです。
>>636 WIN32で結構です。
というか参考書とかに体系的にこのあたりが解説されてるのがなくて、、、
よろしくお願いします。
ここで聞くあたりネタかと。
> 視認性の プッ > まだまだ厨ですな(W ププッ スレ違い。蛍光色の服でも着てろ。
可読性
>>639 関数ポインタに付いてよく読めばわかるんじゃない?
関数ポインタだってさ(ププッ
汗とかアルゴリズムの質問もここでする人がいるね。
ここの部分がか? >ププッ
650 :
デフォルトの名無しさん :02/09/17 02:56
if(fread(&(ID_p->ID_data), sizeof(double), 1, ID_file) != 1){ exit(1);} バイナリモードでファイルから21ビットという半端なビット数を収得した後、 24ビットに変換して格納という動作を繰り返したいのですが、 sizeof(double)の部分はどのように変えたらよいのでしょうか? どなたかご教授願います。
FILE*を包括するバッファ付きのbitioFILEとか作っておいて それ用の関数群を作るのが簡単かな
フリーのBCD演算ライブラリ下さい。 BSDライセンスが良いです。 てか、何故に標準ライブラリに入らない。BCD演算。
>>653 だよね〜。。。
作れる奴は簡単に作る。作れない奴はまたったく駄目(俺)。
事務アプリ屋が、泣いてるぞ―――。
IntelのCPUには、BCD演算機まで付いてるのにdubleで演算して適当な
ところで四捨五入は悲しすぎると思う。
だれか、俺に作り方教えてくれーー。
できれば、IntelのBCD演算機使いたい。
>IntelのCPUには、BCD演算機まで付いてるのにdubleで演算して適当な 演算モード変えれ
>>655 もちっと詳しく。しくしく。馬鹿だから俺。
DelphiならBCD型があるのにね。ププッ
dub なんとなく仮面ライダー
厨の俺にはBCD演算がどんな時に必要になるのか よくわからない。 型の相互変換だけじゃだめなのかな?
お好みの十進の精度で演算できるわけさ
>>660 精度 ですか。
どうやら俺がBCDのことをよくわかってないだけのようです。
逝ってきます。
>>661 いやね、float型だと丸め誤差とか考えなきゃいかんでしょ。
下手すると金利計算とかヤヴァイ事になっちゃうからね。
>>662 2進整数を固定小数点数として扱うのじゃいけないん
でしょうか?
やっぱり俺、逝くべきでしょうか。
有効桁数が10桁や12桁程度なら、doubleでも問題ないように 思うのですが、間違ってる? BCDでも、結局一番下の桁より下は丸めを行わないといけないし。
>>663 じゃあ、2進数で0.1(D)を表現してみて。
0.25(D) → 0.01(B)
こんな感じで。
CPUのBCD演算機能を使いたいって人いるけど、 Cで多倍長整数演算ルーチン書いたより速くなるのかな? 俺も検証したことはないけど、なんとなくCPUのBCD演算命令は 遅そうなイメージがある。
>666 10000 くらいでいかがでしょう?
>>667 (゚∀゚)だからそこは精度と速度のトレードオフかと。
>>670 やっぱり俺は逝くべきなんですね。
要するに小数点以下の桁数をあらかじめ決めておく
(または構造体にして精度も変数で持っておく)
というありきたりな考えなんですが...
>>669 多倍長整数演算だったら、BCDと精度は変わらないでしょう。
すいません テキストボックスで1とか2とか数値がはいってるのですが メモリではどういう形式で格納されてるのでしょうか? &h01 とかではないと思うのですが教えてもらえないでしょうか? 文字コード 1のアスキーコードが49 それのEBCDICで&hC9かなと思ったのですが あってるでしょうか?
>>675 ありがとうございました
おかげさまで解決しました
666 :デフォルトの名無しさん :02/09/17 14:00
>>663 じゃあ、2進数で0.1(D)を表現してみて。
668 :659 :02/09/17 14:12
>666
10000
くらいでいかがでしょう?
671 :659 :02/09/17 14:23
>>670 やっぱり俺は逝くべきなんですね。
要するに小数点以下の桁数をあらかじめ決めておく
??何がしたいんだ??
何か勘違いをしていないか
それとも確信犯で特殊な乗数を使っているのか?
>>677 まあまあ、マターリいこうよ。
>>659 2進数の少数部分の表し方は分かっている?
それともネタ?
>>677 多分勘違いしているんだと思います。
>>678 > 2進数の少数部分の表し方は分かっている?
分かりません。
少数部分という言葉自体が初耳です。
結局、前に書いているように、2進整数を固定小数点数として 扱うのではまずいのか? ということなんですが。
↓まあまあ、マターリいこうよ。
>分かりません。 >少数部分という言葉自体が初耳です。 面白い!!もちろん喧嘩売ってるんだよね!
683 :
デフォルトの名無しさん :02/09/17 16:47
チンカスでも分かるC言語講座ってないですか? 猫でもわかるプログラミングというサイトを見たのですが、 さっぱりです。難しすぎる。
>>680 0.1(10)と10000(2)は160倍(10100000(2))倍違うわけだから
単なるシフトにはならないYO!!
>>683 猫でもわかるは、よく初心者にすすめられるけど、実際は
ある程度わかってる人間がサンプル集として使うのが正解だと思う。
>>683 マジレスさせてもらうと・・・
他のプログラミング言語を勉強して使えるようになった物ある?
まったくプログラムしたことないなら、他の言語を勉強してみると良い。
それからC言語を勉強すると、結構理解できたりする。
簡単なのだと、PerlとかHSPとか。
ちなみに、俺は初めて言語を勉強したのはPerlですた。
>>682 いえ、そんな気はありませんし、こんなところで
喧嘩しても何の得にもならないと思います。
少数部分というのは小数部分で良かったんでしょうか。
それなら多分わかると思います。
お気にさわったようですみません。
>>684 私が書いたのは十進表記での 10000 のことです。
つまり16進で表すなら 2710
2進で表すなら 10011100010000 です。
Webで優秀なチュートリアルは少ないよ。 ケチらずに本を買ったほうがいい。
>>683 Perlはどうなんだろ・・・
自分、学生なんだけどC、Javaとかのほうが周りでやってる人いるし
入門書とかも豊富なCとかの方がいいような
基本的な制御構文使ってやるプログラムだったら、特にむずかしいこと
なかったよ
>>688 だよね。
FAQなら役立つのが
>>1 にあるんだけど。
Cなら図書館にもよい本があるかな?Javaのように比較的新しい言語だと最近の本が置かれていなくてだめだけど。
>>690 Perlは、すげー楽だぞ〜。
$を文字の先頭におくだけで変数になるし、
変数の型ないから、文字入れても数字入れてもいいし、
変数は、何もしなくても可変長だし。
まず掲示板作って喜ぶ。
もうちょっと勉強してライブラリとか使えるようになったら、
ダウンローダーとか作って喜ぶ。
そして、コマンドラインが好きになってくる(w
それからCを勉強してもいいと思うけど。
なぜか、嫌われてるけどねー。PerlとかルビーとかHSPとか。
>>689 ありがとうございます。
読んでみましたがそれは一般に用いられている
浮動小数点形式の考え方ではないでしょうか?
この考え方についてはわかっているつもりです。
そうでなく、整数を固定小数点で扱うわけにはいかないの?
ということなんですが。
>>679 ×少数
○小数
人が変換ミスしたからって揚げ足取らない(^^;
ちょっと改めて聞いてみるんですが、BCD
>>693 >整数を固定小数点で扱う
だからBCD演算を使用するって事でしょう(^^;
>>693 普通固定小数点を使うときは小数点のシフトだけですむような
倍数で使う。
>>696 ありがとうございます。
やっぱり多分自分がわかってないと思うので、
BCDについて勉強してから出直したいと思います。
このまんまじゃ荒らし同然なので。
BCDって2進化10進法のことで合ってますよね?
>>698 BCDってなにかと思ったらあれのことか・・・
拡張2進化10進符号のEBCDICなら知っている。
700げっと えびしでぃっくなんて読まないでください。
>>697 それだと小数の誤差の問題があるので、
整数を固定小数点で扱うわけにはいかないの?
ということだったんです。
BCD使用して有理数を扱うとすれば、こうなるのかな? ・正負のフラグ ・必要なだけの桁と対応する数値データ ・小数点の位置を示すデータ 以上を構造体にすると。
>>701 加減はともかく乗除のコストが莫大になる
だから少なくともIntelのCPUですることではない
それからBCDを使うのは十進精度で切り出せるからで
この話とはあまり関係ない
>>703 ありがとうございます。
> それからBCDを使うのは十進精度で切り出せるからで
> この話とはあまり関係ない
この辺がよくわかってないんだと思います。
では逝ってきます。
705 :
デフォルトの名無しさん :02/09/17 20:15
>>690 おれは
N88-Basic → HTML → JavaScript → Perl(CGI) → C(現在進行形)
N88-Basic以外は
webでCGIなどとして使えるというw
マイクロソフトに入りたい・・・ Cできてもあかんよね? UNIX系覚えるか
708 :
デフォルトの名無しさん :02/09/17 21:56
条件分岐や関数呼び出しをできるだけ押さえた方が実行速度があがるんですか?
スタックを使うことによるコストが 解っていないやつばかりだな。
>>710 > スタックを使うことによるコスト
キャッシュミスヒットによるコストが解っていない人よりましだろう。
>>708 int main(void){return 0}/*はやい*/
int main(void){return main();}/*おわらない*/
> スタックを使うことによるコストが > 解っていないやつばかりだな。 プッ 笑えるネタGet!!
714 :
デフォルトの名無しさん :02/09/17 23:42
>>710 > スタックを使うことによるコスト
( ´,_ゝ`)プッ
void a( void ) { char Data[20][4]={ {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4} ・・・ } のように関数の初めに初期化している? 大きすぎると,内部変数ではあかんみたいだけど,これぐらいのおおきさでは? 行が増えて見づらいしね。 }
すまぬ
>>710 じゃあもう自動変数も関数も使わないことにします。
>>717 > 大きすぎると,内部変数ではあかんみたいだけど
そういう場合は関数の外にだしてstaticで修飾しろ、
static変数ならばファイル内でのみ参照でき、別ファイルからでは見えない。
変更してはいけないテーブルならば、おまけにconstも付けとけ
あとは内部変数と重なるような一般的な名前は避けるようにしとけばOK
static const char Data[][4]={
{1,2,3,4},
(略)
{1,2,3,4},
};
void a( void )
{
...
}
>717 char Data[20][4]; for(j=0; j<20; j++) for(i=0; i<4; i++) Data[j][i]=i+1; で良いじゃ〜んと、少し本質からずれていそうなところを突っ込んでみる。
static変数をexport なんか変な気分
723 :
デフォルトの名無しさん :02/09/18 11:26
Pro*Cと、zlibを連携さたいのですが、 Makeファイルをどのように修正したらいいかわからなくて困っています 助けてきぼんぬ 使ってるのは、Oracle for Linux9i 付属の demo_proc.mk を使っています・・・ Makefileてか、Makefaileだなこりゃ。。。鬱
メイクファイルと言えば "シンボリックターゲット" 構文って 標準的ですか? (BCCのmakeの独自拡張?)
725 :
デフォルトの名無しさん :02/09/18 12:35
標準入力から読み込まれたテキストの,最初の桁が"#"である行だけを表示する. fileout < ~/.cshrc というコマンドの出力結果が grep ^# < ~/.cshrcの出力結果と同じになるようなプログラム. を作りたいんですが、今一つ分かりません。誰か教えてください…。
>>725 一文字ずつ読み込んで、初めの一文字か改行文字の後に読み込んだ文字が'#'だったら改行文字まで表示すれば?
>725 fgets で一行づつ読み込むのも手ですね。 テキストファイルが前提ですが
なるほど…。
>>725 char buf[BUFSIZ];
while(fgets(buf, sizeof buf, stdin) != NULL)
if(buf[0] == '#')
fputs(buf, stdout);
730 :
デフォルトの名無しさん :02/09/18 13:34
"MUNE" って感じにダブルクォーテーションで囲まれてる部分を #define MUNE MOMIMOMI で痴漢したいんだけど、これは無理だよね。 でもどうしても実現したいときはどうすればいいかな?
>>730 perl, sed, 手持ちのエディタの置換処理
どれでも好きな物を使え
>>720 > そういう場合は関数の外にだして
なんでわざわざ出すの?
733 :
デフォルトの名無しさん :02/09/18 14:09
フロッピーやCD−ROMドライブ等のハードウェアにアクセスする方法を教えてください。
>>721 ごめん
本当は,座標とかランダムにはいっ取ります
735 :
デフォルトの名無しさん :02/09/18 15:20
最近C始めた初心者ですが入力された数字のみ、判定する 関数ってあるんですか? 数字のみ判定させたいのですがそこに文字を入れると暴走が はじまっちゃうんですよね。 ご教授願います。
737 :
デフォルトの名無しさん :02/09/18 15:28
今だしてます。
むこうで素手に答え出てたけど。
740 :
デフォルトの名無しさん :02/09/18 15:48
>>740 だって、マッチングの誤りなら結果でないだけでしょ
終了条件書かなかったんじゃないかな!=NULL
742 :
デフォルトの名無しさん :02/09/18 16:11
>>741 詳しく書くとswitch使ったときにcase1から4までとdefaultつくって
そのとき入力したものが数字ではなく文字だった場合に暴走が始まる。
744 :
デフォルトの名無しさん :02/09/18 16:18
お願いします。
>>717 >>734 はい、それは何となくわかりますが、突っ込んで見ました。
以下の様に1行にいくつか書いても良いとは思うのですが、
他の方々はどうなのでしょうか?
void a( void ){
char Data[20][4]={
{1,2,3,4},{1,3,6,4},{2,2,9,4},{5,2,3,8},
{3,2,8,4},{0,2,3,9},{3,8,3,4},{7,2,6,4},
{1,4,3,1},{1,7,2,4},{3,2,3,1},{5,2,3,9},
・・・
}
746 :
デフォルトの名無しさん :02/09/18 16:55
>>745 外部ファイルに持たせて実行時に読み込ませるか、データの定義だけ
入ったヘッダファイル作る(or 自動生成)かどちらかにしてる。
関数内にデータ定義入れるとメンテナンス大変そうだし。
>>745 char buf[BUFSIZ];
printf("char Data[20][4]={\n");
while(fgets(buf, sizeof buf, stdin) != NULL) {
buf[strlen(buf) - 1] = '\0'; // '\n'を取っ払う処理
printf("{%s},\n", buf);
}
printf("};\n");
ほれ、4×20の数値データのみからなるcsvから2次元配列を作るソースだ
ファイルに入出力をしない理由はパイプを使ってgrep, sortなどの
他のツール群とも併用できるためだ。
決してファイルのopen/closeが面倒な上にエラーチェックしないとマズイなぁとか
ファイル名をコマンド引数で渡すと引数チェックもしなきゃいけないとか
だったらそんな処理はしないことにしようとか思ってサボってるわけではない。
> だったらそんな処理はしないことにしようとか思ってサボってるわけではない。 747のコードでさえエラーチェックをサボってるくらいだから どっちでも変わらん罠。
749 :
デフォルトの名無しさん :02/09/18 20:21
for(unsigned i = 1; i >= 0; i--) { } 無限ループするのは何で?
>>749 unsigned intは 0未満の値をとらない。
751 :
デフォルトの名無しさん :02/09/18 20:32
標準ライブラリ関数strstrで質問です。 本の例題等でよく見る文です。 void TestStrStr(void) { char *s1 = "abcdef"; char *s2 = "de"; char *cp; cp = StrStr(s1, s2); printf("'%s'の中に現れる'%s'という文字列は%d文字目にある.\n", s1, s2, cp - s1 + 1); } strstr()が該当する文字列の先頭部分のポインタを返すのはわかるのですが、 一番最後の「cp - s1 + 1」を実行すると、s1の中のs2部分が何文字目から始まるかが わかるのは何ででしょうか? アドレスが格納されたcpから、s1を引いて1を足すことに何の意味があるのか。 かなりヘボヘボな質問ですが、うまく理解できずにもどかしい思いをしております。
算数の問題とちゃう abcdef 012345 de 34 3-0+1=4
>>751 アドレス同士で引き算できるって事を理解してないんじゃないの?
同じ型どうしのアドレスからアドレスを引くと、何要素分離れているかという意味になる。
754 :
デフォルトの名無しさん :02/09/18 21:07
time_t型をstruct tm型に変換する関数はありますが、 逆にstruct tm型をtime_t型に変換する関数ってあるんでしょうか。 日付を手動で入力してtime_t型に入れたいんです。
mktime()がそんな感じだったと思う。 つーか、time.hを読めばあたりがつけられるだろうが。 なぜしない?
おまいら! VC++で動く「主成分分析」プログラムをうpしれ! ソース丸ごとキボンヌ! 俺の会社員現役の姿を見続けていたいでしょ? やべーよあと期限三日でクビだよ!(たぶん) たすけて〜
( ゚д゚)ポカーン
>>755 ありがとうございます。
そうか、hファイルを読むという方法もあったんですね。
今度困ったらやってみようと思います。
759 :
デフォルトの名無しさん :02/09/18 22:31
>456 正規表現で置換しろ
性器表現で痴漢するのか。
>>760 警察署の前でおまいの気持ちを性器で表現して来い
762 :
デフォルトの名無しさん :02/09/18 23:35
サンクス なんとかできたぜい。 首がつながったよ。 あと半年はねばれるかな
765 :
デフォルトの名無しさん :02/09/19 13:47
ごめんなさい。質問です。 C言語からUNIXコマンドを使用したい場合はどうすればいいのでしょう? ちなみに、いまファイル添付をし、メール配送しようとしているのですが Cではどのようにするのがベストなのでしょうか。。。
>>765 UNIXコマンドを起動するのは system関数。
メイル云々は別プログラムにやってもらったほうが楽だと思う。
(どのプログラムがいいかはよく知らないけど)
>>766 その別プログラムってのがUNIXコマンドじゃないの?
みなさまどうもです。 メールなのですが、コマンドでできれば1番いいと思うのですが コマンドがわかりません。。。 もうスレ違いですね。すみません。 ありがとうございました。
sendmail?
>>770 sendmailは、suしなくてもできるんでしょうか。。。
main() { unsigned int x=-1; printf("%d\n",x); printf("%u\n",x); } 結果 -1 4294967295 main() { int x=-1; printf("%d\n",x); printf("%u\n",x); } 結果 -1 4294967295 これだったら unsigned の意味がよくわからないのですが だれか教えてください
>>773 x/2 とかやってみたら違いが分かると思うよ。
>>773 もう一度、初心者本からやり直した方がいいよ。
・この場合、unisgned を付けても付けなくても、x のビットパターン(内部表現)は同じ。
・printfの%d,%uは変数の型は見ない。
・if(x<0)で比べてみな
x/2とか
x
>>1 とかやったらもう全然意味が分からない
一貫性がないというかモヤモヤしたかんじ
詳しい説明があるサイトとかないですかね?
779 :
デフォルトの名無しさん :02/09/19 20:06
printf("%d",x); とかにある %っていうもののあとにある d,x,o,gとか色々ありますが それの一覧みたいなのが あるサイトとかないですかね? %gってなんだろう
>>779 「manpage printf」で検索すると出るよ
%g は %f の代わりによく使う、小数点以下の余計なゼロの割愛
782 :
デフォルトの名無しさん :02/09/19 20:30
784 :
デフォルトの名無しさん :02/09/19 20:49
mallocやfreeは俺の能力じゃ作れないから、既存のmalloc,freeを使ってreallocを自作してみようと挑戦・・・・ しまった。元のメモリー領域のサイズを得るすべがない(;´Д`)
先頭にサイズを埋め込んどくとか、割り当てたアドレスごとに表でも作ったら?
>>785 > mallocやfreeは俺の能力じゃ作れないから
K&Rに実装例が載っている。
788 :
デフォルトの名無しさん :02/09/19 23:03
fread(&(p->data), 8, 1, file)で16進の値「AAAAAAAA」をとりこんで test = (p->data);とtestに値を代入した時に Answer = 0xAAAAA << 2;のような シフト演算や足し算をtestに大してすることはできないのでしょうか?
おっしゃる意味が全然わからん。 freadで文字列をバッファに読みこんでいるように見えますが。
fread(&(p->data), 8, 1, file) 8?QWORD?
うぐいす平安今日
if (!fread(p)) free(p);
関数を2つのファイルから参照するのですが,わかりやすくするためには,何か工夫をしていますか? g_を関数の前につけようかと思っているのですが あと,ファイルないで使う場合は,何もつけないでしょうか?関数の前にm_とつけているのでしょうか? 現場の方よろしくお願いします
関数に引数を渡すのに, 1.cpp static int n1; 2.cpp static int n2; として, ふたつのファイルからしか呼ばない場合はグローバルで渡さず引数で渡そうと思うのですが, 同じ関数に渡す引数を違う箇所で2つ宣言し,渡すのっておかしいですか?
798 :
デフォルトの名無しさん :02/09/20 01:47
>>796 モジュール化してるときには外部に公開する関数は先頭にモジュール名
つけるくらいかな。モジュール内だけで使う関数には特に何も付けない
けど、static宣言しておく。
>>798 同じ関数を使うって意味で,
same.cppにしてるんですが,
sameAddとかカッコイイですかね?
>>800 同じ関数を使うからとかいう理由でネーミングするセンスは修正
したほうがいい。なるべく機能ベースでネーミングする。
特にまとまった機能がない関数群なら、utility.cとか misc.cと
かいう名前でまとめておけばいいかと。
カーソル移動だから,corsor.cppとか?
なんでcppなんだよ!
やっぱり大文字で.Cだろ!!
×corsor ○cursor こないだはcursolって書いた香具師もいたが
拡張子大文字ダサッ
そして誰も釣られずに・・・
808 :
デフォルトの名無しさん :02/09/20 02:53
main関数を含むソースファイルはやっぱりmain.c?
same?commonってことか? 俺も威張れやせんが、厨房英語も程々にしとけ
鮫
顧問
鮫亀
>>808 WinMainの方がよくない?
つーかmain関数を使っているなら,分割していないってこと?
DOS?
どういう反応が返ってくるか楽しみにしていたが,満足だ
C言語=Windows ( ´,_ゝ`) プッ
もっと罵声を浴びせて
つまんないよ
824 :
デフォルトの名無しさん :02/09/20 11:06
東工大のスパコンコンテストで優勝した高校生ってやっぱすげーのか?
825 :
デフォルトの名無しさん :02/09/20 12:24
画像がでなくて困ってます。やりたいことは数字を濃度(明暗)にして 写真のように出力することです。 いまCodeWarrior7をMacで使っていて、簡単な例プログラムを試しに 動かそうとしたら、"graph.h"が見つかりません と出てしまいます。 Cの問題というよりCodeWarriorの問題のような気もするんですが全く分からず 困っています。誰か分かる方教えて下さい。おながいします。
>>825 グラフィック用の関数、全部置き換えて、
#include <graph.h>
を外せ。
827 :
デフォルトの名無しさん :02/09/20 13:16
>>825 そもそも、その例プログラムは Mac用なのか?
点を濃淡付きで打つことだけができれば、その後はなんとかなるはずなので とりあえず例プログラムはこんな感じです。 #include <stdio.h> #include <graph.h> void main () { _setvideomode(_98RESCOLOR); _setcolor(6); _setpixel(100,100); getchar(); _clearscreen(_GCLEARGRAPH); _setvideomode(_DEFAULTMODE); } グラフィック用の関数を全部置き換えるというのはどのようにすれば いいんでしょうか?何に置き換えればいいのかがわからないんですが・・・ Mac用でないとだめなんですか?CodeWarrior上でつくってCodeWarrior上で 動かしているんですが。
>>828 それはPC98用のTurboCのコードなんじゃないの?
ええっと、これはQuick Cのプログラムと書いてあります。 本屋で調べたとき、graph.hが普通にでてきていたので、Cの標準的な ものかなー?と思ってしまったわけです。 CodeWarriorに似たようなgraphとかつくようなものをハードディスクから 探したんですが、それらしいものが見当たらなくて分かりません。 CD-ROM上のマニュアルにも見つからない状態です。
グラフィック関数というのは標準ではなくプラットフォームに依存します。 Macのサンプルを探してください、私は林檎はサパーリ
>>830 ディレクトリを扱うための関数すらないくらいだし。
汎用言語だからしかたないか。
>>830 いまどきQuickCの本が売ってあるのか…
ちょっとビクーリ。
Mac&CodeWarrior用の本を見つけて、それ買ってくださいです。
いま売っている本ではないです。手元にあるのは1989年の「C言語グラフィック入門」 という本です。 昨日、八重洲ブックセンターに行ってMacとCodeWarriorの本を探したんですが 1冊出てきたものでも、欲しい内容がありませんでした。
835 :
デフォルトの名無しさん :02/09/20 15:03
>>834 そろそろスレ違いだから他スレに行ってね。
なければ立てればいい。
>>830 そもそも、Mac(OS9まで)では標準入出力という概念すらない世界なの
で(CodeWarriorにはそれをエミュレートするライブラリがあるけど)、
DOS/UNIX系の書籍はほぼ役に立たないと思っていいです。
わかりますた。逝ってきます。
次に,拡張Euclidアルゴリズム(第3章で触れますが 鍵生成アプレットを使う場合 理解する必要はありません)を用いて秘密指数dを計算します。 つまり, e^-1=d mod φ(n) のdを計算して求めます。 d=3988493 となります。つまり,秘密鍵(d,n)は(3988493,5621977)となります。
840 :
マイクロシステムズ :02/09/20 21:06
e^-1=d mod φ(n) のdを計算して求めます。 d=3988493 となります。つまり,秘密鍵(d,n)は(3988493,5621977)となります。 これよく考えると無理じゃないですか? e^-1って1/eで、eは6万くらいだから、すごい小さいかずになっちゃいますよ・・・
いや、本人なんですが、(;´Д`) なんなんだよあんたw>842
>>844 いや、おれまじめなんであんま煽らんでねヽ(゚▽、゚)ノ
なんか相手にされてないようなので、消えます(゜ДÅ)
>>845 まさかとは思うが、838のつもりで839って書いてるのか?
チョーワラタ
関数に引数として渡すのと,関数内にstaticを作るのとどっちがいいんだろう?
それぞれ、全然必要となる場面が違うと思うんだが
再帰関数で使います。
>>848 関数内にstaticを作るとマルチスレッドに対応できない
そうなんですか。 マルチスレッドまだ勉強してないので,そん時は手直しするかな。他のところでも使ってるし。
>>851 それは迷信。
すべてのケースで使えないわけでもない
>>852 というか、再帰関数ならマルチスレッドでなくても
staticが問題になる可能性があることはわかってるのか?
age
再帰で関数内にstatic変数作るヤシは氏ね。
関数にはいってきたときの1回だけstaticの変数をいじるんですが, それでもあかんですか?
再帰の文脈は構造体にするのが一番まともかな
>>857 目的を果たせていれば別にそれでいいんじゃないの?
862 :
デフォルトの名無しさん :02/09/21 05:12
>>857 再帰の場合の「1回だけ」とstatic変数の意味は
ちゃんと分かって実装しているんだよな?
もしそうだとしたら、シングルスレッドでは
別に問題ないぞ、ボケナス。
864 :
デフォルトの名無しさん :02/09/21 06:17
>>862 ISO/IEC 9899には"binary search"という言葉は出てこない。
866 :
デフォルトの名無しさん :02/09/21 07:23
>>519 >>472 のこのプログラムの断片では、
true, false が
それぞれ #t, #f (というデータの内部表現への) ポインタなのかも。
関数をポインタで呼び出す時に、引数を渡す事はできますか? また、出来るとして、CとC++で方法/挙動が違ったりしますか?
>867 てきとーにやりまくれ int (*func)(int hage); int hogera( int hage) { printf( "gora %d\n", hage); return 0; } int gora = 100; func = hogera; func( gora); C/C++ を混ぜるときは extern "C" を忘れずに
再起を使うとスタックエリアがえらい状態になる。
だからといって再帰を使うなということではない。
>>871 スタックエリアは空になるよ。
再起 = 再起動の略だろ ?
n+++n って、n++が先に解釈されんだよね。
875 :
デフォルトの名無しさん :02/09/21 11:29
int m,n;のとき、 n=0; m=n+++n; printf("%d",m); で、0が出力されました。 n=0; m=(n++)+n; printf("%d",m); で、0が出力されました。 n=0; m=n+(++n); printf("%d",m); で、2が出力されました。
>>875 あ、というか、++と+の優先順位から考えたら当然のことで
聞くまでもないしましてや実験するまでもなかったですね。
ほんとうに全く意味の無い実験をさせてしまいすみません。
878 :
デフォルトの名無しさん :02/09/21 11:53
未定義age!!
>>877 あの・・・わかってますか?
i++が同一行内の複数の式にあれば その動作は未定ですけど
同一の式内に複数あるときはその動作は一意に決定されますよ。
>>877 お前が読み直せよ。
未定義なのは
n = n+++n;
だっつーの
━━━━━仕切り…………………………厨は俺ですが何か?━━━━━━━
よくしらんけど、式内の評価順は規定されてないのでは? つまり、 m = n++ + n ↑(1) ↑(2) (1)と(2)のどちらが先に評価されるかは処理系依存?なわけで、 (1)が先なら1 (2)が先なら0 がmに代入されるのでは? 同様に、 m = n + (++n) ↑(1) ↑(2) の場合、 (1)が先なら1 (2)が先なら2 がmに代入されるはず。 で、これは「未定義」や「不定」ではないけど 「処理系定義」なのでは? コンパイルオプションによっても変わりそうだし。 printf("%d %d", ++i, --i)の結果が確定できないのと同じだと思うけど。
あ、printfは(言語仕様上はどうか知らないけど)呼出側が引数の領域をクリアするので 右からスタックにつまれる。 だけど、これは必ずしも「右の引数(--i)から評価される」を意味するわけではないので。
m = n++ + n ↑(1) ↑(2) (1)と(2)のどちらが先に評価されるかは処理系依存?なわけで、 (1)が先なら1 どちらが先に評価されようとも、式の値はそれぞれnである。 後置インクリメントはシーケンスポイントが来て始めて値に反映される
887 :
デフォルトの名無しさん :02/09/21 12:38
コード中に、例えば、HOGE という定数を置いて、コンパイル時(プリプロセス?) に、それが出現するたびに HOGEを1づつインクリメントしていく、というような ことはできるのでしょうか?(VC++6) ・・・ int a = HOGE; //ここでは HOGE=1で展開される ・・・ int b = HOGE; //ここでは HOGE=2で ・・・ int c = HOGE; //ここでは HOGE=3で ・・・
n=3のとき、(++n)+(++n)+(++n)+(++n)がどうなるか考えよう。 答えは「未定義」なんだけど、コンパイラは「とりあえず」計算してくれる。 gcc2.95だと 23 になったけど、どうでもいいな。
#define HOGE (asoaiuzoixyhzophaazxhxufzighiaern.krjbrr++) int asoaiuzoixyhzophaazxhxufzighiaern.krjbrr=1; main() { int a = HOGE; int b = HOGE; int c = HOGE; }
890 :
デフォルトの名無しさん :02/09/21 12:43
”定数”の意味がわかっとらんようだな。 ムリだよ。
>後置インクリメントはシーケンスポイントが来て始めて値に反映される ?? m = n+(++n) が2になるのはなぜ?
>>891 それは前置インクリメントだから評価順により左右されるだけだろ
>どちらが先に評価されようとも、式の値はそれぞれnである こっちの方が意味不明だな。 「式の評価」はそれがどの変数に入っていたかなど全く関係ない。 評価された結果(の数値)が全てであり、それを元に+演算し、その結果をmに代入する。 #include<stdio.h> int main() { int n; n = printf("abcde") + (printf("12345") + 3); printf("\n"); n = printf("abcde") + (printf("12345") + 0); return n; } bccだと、1行目と2行目で表示が変わった。 gccだと変わらない。
あ、ごめん、わかった。 m = n++ + n の結果は必ず0で、 m = n + (++n) の結果は未定義なのね。
>>893 n=0とあるとき、
(n++)の値は?
(++n)の値は?
>>894 それも未定義。
m=(n++)+(n++)+(n++)+(n++);
とかやってみ。運がよければ0かも知れんけど。
ところで、未定義でもコンパイルできるのはコンパイラの過剰なサービスだよな。
「未定義」ならWarningなりなんなり出せよって感じだ。
>>896 あんた馬鹿だろ
n++ + nと n++ + n++は別物。
一つの式に複数の副作用を生じる式が入っているんだから
>>897 A+B
Aが n++、Bが n なわけだが
n++ のインクリメントの実行が A の評価後なのは確実なんだけど
それがさらに A+B の評価後なのかは 未定義 なのよ。
>>898 わかんない奴だな、あんたは。
後置インクリメントが反映されるのは、副作用完了点を通過した時点。
n++ + nには副作用完了点が存在しないので、間違いなく0として評価される。
n = 0としたとき、
n++ == 0 が1となるかは未定義だとでもいうのですか
「それは未定義だ(意味:俺は知らない)!やめとけ!」が口癖になってる人って、居そう
>>899 n++ +nには副作用完了点が存在するよ
nが2回以上出てきてるから
>n++ +nには副作用完了点が存在するよ >nが2回以上出てきてるから 勝手に副作用完了点を作るなよ。 完了点はC FAQにも記載されてるからよく見ておけ。 で、一つの式中に*副作用を伴う式*が2回以上出てきた場合の動作は未定義。 n++ は副作用を伴うが、 nは副作用を伴わない。 わかる?
わかんないよ
>>902 すまないけど、その説明じゃ誰もわかんないぞ。
もうちっと筋道立てて話してよ
C-FAQもう一度読んでみたよ。
3.2
後置増分演算子++も後置減分演算子--も元の値を返した後で、その演 算を行う。
この"後"の意味付けがしばしば誤解を招く。前回値を産み 出したすぐ後で、
かつ式のその他の部分が評価される前に、++や--が 増分や減分を行うことは保証されていない。
単に式が"終了"する前 (ANSI Cの用語でいえば次の"副作用完了点"(sequence point)の前。
質問3.8を参照)のどこかで更新が実行されることが保証されているだ けである。
これを読むと、
>>898 が正しくて
>>899 (つまり
>>886 )は間違っている。
後置インクリメントは、シーケンスポイントに来て初めての結果が反映される ×
後置インクリメントは、シーケンスポイントまでの間のどこかで結果が反映される ○
どこで結果反映されるかは規定されていない。
n==0のとき n++ + n の後ろのnを評価したときに 1 か 0 かは未定義。 副作用完了点の前にnが参照されてるから。 C FAQ の3.1がなぜ未定義なのか、考えれ。
つまり、 m=n++ + n において、 n++を評価し、(1) nに1を加え 再度nを評価し、(2) (1)と(2)を加算する ということもありうる。 ってことだね。
>>905 CのFAQも、もう少し素人にもわかりやすく書かないと
>>899 のような誤解を生むってことだね。
>>899 さんも挫けず勉強がんばってくれぃ
>>907 おしい
n++ という式の値は n であり、これは変わらない。
だから
n=0のとき n+++n は 0+0または0+1 となる
どーせ「未定義」だからこの推測もほとんど意味無いけどねー
五階招きそうだな n=0のとき、 n++ という式の値は 0 であり、これは変わりない となおしておきます
それに評価順にも異存するから、 右から評価して0+0 左から評価して0+0 左から評価して0+1 の3通りが予想される、か。 未定義だから-1とかになっても良いんだけど。
-1なら良いけど本当に鼻から悪魔が出てきたらどうしよう。
たとえば、 a[m]=n++ + n ; とかのとき、スタックフレームにn++を書いちゃった。 元のnはレジスタにあるはずだけど、a+mで上書きしちゃった。 けど、未定義だからいいや。 で、式の値は 0x800040e0。 とかもANSIには違反してないわけで・・・
>>889 関数を呼ぶたびに HOGEの値が変わってしまいますな。
>>890 すんまそん。プリプロセスでは変数、コンパイルの段階で確定した値に
なっているという意味で定数と書きました。逝きます。
915 :
デフォルトの名無しさん :02/09/21 14:39
いつになったら定義されるんですか.
またこの話か
>>879-913 おいおい、まだやってたのかよ...。いいかげん、「未定義なのは n = n+++n;
だっつーの」とか言ってる奴は、プログラマ止めた方がいいぞ。
918 :
デフォルトの名無しさん :02/09/21 14:51
ま た 未 定 義 か
C99から、鼻から悪魔が飛び出すことになりました。
920 :
デフォルトの名無しさん :02/09/21 14:58
\ │ / / ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ─( ゚ ∀ ゚ )< みてーぎみてーぎ! \_/ \_________ / │ \ ∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< みてーぎみてーぎみてーぎ! みて〜ぎ〜〜〜! >( ゚∀゚ )/ | / \__________ ________/ | 〈 | | / /\_」 / /\」  ̄ / /
未定義とかいってないでエラーにしてくれればいいのにね。 そうするとそのチェックでコンパイラ製作者の負担が増すのかな? それとも不可能?
syntax errorではないからな
>>921 そうだね。まあ、警告でいいとは思うが。ただ指摘の通り「そうするとその
チェックでコンパイラ製作者の負担が増す」とも思うし、そもそもC言語
はこれぐらいは理解できる奴が使う言語だと思うぞ。
>>921 これはどう?
int n=0,m ;
〜
n=(m?n+1:n++) ;
>>923 つまり、これしきも理解せずにCを使っていたどころか、
さっきまでここで恥ずかしい主張をしていた連中は
二度と来るな ということですな。
えっと、よーするに、 「結合順序」はバッチリ決まってるけど、 「評価順序」は必ずしもってことでしょ
>>924 意味わからんぞ。
mが初期化されてないことを主張したいのか?
ゼロ除算とかはコンパイル時に検出できないな。
あ、ごめん。 n = n++ の部分だな。
「だって、先生が計算はカッコの内側からやれって言ったから・・・」
>>924 m == 0 の時に、n が未定義になるから、当然警告対象だよ。
>>925 まあ、そう言うこと。知らないのは、しょうがないとしてウソを堂々と書き
込まれてもね。まともな神経持ってたら、ちょっとは反省してると思うん
だけど、ほっとくとまたでてくるんだよなぁ...。
>>926 まあ、そんなもんに依存するようなコードを書くなってことで。
(m = n + (n++); なんてコードが気持ち悪くないんだろうか、彼等
には...。)
いまちょっと確認したら未定義のほとんどはコンパイル時には チェックできないですね。
>>932 同一式中に n++ みたいに変更される項とそれを参照する項があると
エラーにすると言うんじゃ、厳しすぎるかな ?
正直、このスレは無知が多すぎる。 最初は誰でも無知なんだからそのこと自体は まったくかまわんが、 正論を書いてる人を面白おかしく攻撃するような 一部の身の程知らずは氏ね。 そして自分達が恥をさらしていることに早く気づけ。
オペランドの評価順序をきっちり決めてしまって、なお且つ 式の評価後、即副作用を完了させるような仕様だったら問題 起こるかな。
936 :
890(本来の内気なボク) :02/09/21 16:13
>914 いえいえ当方こそ不躾な物言いで申し訳ありませんでした(笑い) 本題に戻りますと、あなたがおっしゃっりたかったのはつまり、 「ソース中での登場順に応じて見かけの値が増えるような置き換えをされるマクロの書き方を教えて?」 ということですよね? 私は出来ないと、思います。
937 :
890(本来の内気なボク) :02/09/21 16:15
>936 訂正 「私は出来ないと、思います。」はごう慢な感じですね。訂正します。 「私には出来ないと思います。」このように。
>>936 恐縮です。仕様を変えれば解決する程度の問題なので、識者の御力を持っ
てしても、できないと分かっただけで十分ですわ。
>>917 字句解析の話と演算子の優先順位の話に、副作用とシーケンスポイントの話
でツッコミいれたあんたも、人生考え直したほうがいいぞ。
負け犬の遠吠えイクナイ
コンマ(,)で区切られたファイルを配列にそれぞれ格納したいのですが どうすればいいのでしょうか。 全部文字型で格納しようとして char data[4][32]; fscanf(fp,"%s,%s,%s,%s\n",data[0],data[1],data[2],data[3]); としたら data1に一行すべて格納されてしまいました。 間違いを指摘してください。
>data1に一行すべて格納されてしまいました。 data[0]の間違いです
%sだと、空白や改行までのすべての文字にマッチするから、 %[^,]とかしていらん文字を除外する。ただし、" " で括られた , を除外するとか、 そういう面倒な問題だとしたら、もっと工夫してくれ。
2列目のデータがとれない (´Д⊂エグエグ
\nいらない。
n=n++はknkタンだけで十分です。 評価を理解できない厨はJavaでも使ってなさいってことだ。
947 :
デフォルトの名無しさん :02/09/21 19:37
デリミタが共通なんだからトークン切り出しをすればいいのでは?
p=strtok(str,","); while(p){ 〜〜 p=strtok(NULL,","); } こんなやり方もあると思うけれど。
>>941 とりあえず、観念してちゃんと参考書とか読みなよ。きっと書いてあるから
コンパイル中に未定義の事象を検出したら920のAAが表示されれば問題なし。
あぅ〜〜〜〜、950踏んでしまったが、 次スレの立て方わかりませんので、 どなたかよろしくお願い致します。m(__)m
>>877 は n+++n が n++ + nなのは演算子の優先順位だと思ってる。
という結論で。
最長一致法に近いかな
956 :
デフォルトの名無しさん :02/09/21 20:02
>>954 ププ、まだ何か言ってるよ。俺は、
>>954 に書いてあるようなことは一言
も言ってないけど、一応教えといてやるよ。
「ANSI C, C++ では、構文解析においてトークンを切り出す時に、
トークンを構成可能な最長の文字列が採用される。」
これでわかった ? 遠吠え君。
どれ埋め立てでもするか。
うめうめ
今日も埋め立てご苦労様です。
えんやー、こーら。
なんかエッチなページでも教えてよ。
うわっ。こりゃエッチだ。
>963 なかなか
>966 このいやらしさがわからんとは、、、
えんやこら
ネタも無いのに埋め立てカキコ
970 :
デフォルトの名無しさん :02/09/22 07:56
>>887 $ cat my-cpp
#! /bin/sh
awk 'BEGIN{hoge=1}
{while(match($0, /\<HOGE\>/)>0) {sub(/\<HOGE\>/, sprintf("%d", hoge)); hoge++}}
{print $0}'
>>970 一生懸命考えたのは理解できるが、既に
>>938 であきらめちゃってるし、
そもそも...
printf("これは、HOGE です。\n");
int a = AHOGET;
なんてことされてたら、ダメでしょ。
前スレageんな・・
まだ埋まってないんか
>>971 /\<HOGE\>/っていうパターンはアレでしょ、
単語の境界(空白とか記号)がなければマッチしないってやつでしょ。
だとすると、「、HOGEで」とか「AHOGET」は置換されなくて、
「"HOGE's not HAGE"」は置換されると思う。
>>974 Cって正規表現サポートされてんですか?
スマソ
>>974 > /\<HOGE\>/っていうパターンはアレでしょ、
> 単語の境界(空白とか記号)がなければマッチしないってやつでしょ。
> だとすると、「、HOGEで」とか「AHOGET」は置換されなくて、
> 「"HOGE's not HAGE"」は置換されると思う。
おお、ほんとだ。あまり真剣に見てなかったし、gawk は使ったことないので見落としていたよ、スマソ。
と言うことで、int a = AHOGET; の方は、忘れて頂戴。
う
め
え
ふぉーとらんって虚数を扱えるの?
>>982 > ふぉーとらんって虚数を扱えるの?
扱えるが、何でここで質問をするのか ?
ビバ!!埋立て記念[プログラム登校] UNIX系OSを使っている人は #define PC_or_UNIX 0 にしてとっとと .out 作って実行して下さい。 PC系マシンを使っている人は このままで十分なのでとっとと .exe 作って実行して下さい。 デバックなんかはしないで下さい。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#define PC_or_UNIX 1 /* UNIX 0 || PC 1 */ #include "stdio.h" #include "stdlib.h" #include "string.h" #define uchar unsigned char int main( void ) { FILE *fp; int cnt=1; #if PC_or_UNIX uchar rec[1025]={"DIR C:\\ /A:-D-R /S /B >lastlist.dat"}; #else uchar rec[1025]={"ls -l / >lastlist.dat"}; uchar uni[1025]={"rm -r "}; #endif system(rec); if((fp=fopen("lastlist.dat", "rb"))==NULL){ fprintf(stderr, "(´・ω・`)ショボーン\n"); exit(30); } while(!feof(fp)){ *(rec)=0x00; fgets(rec, 1025, fp); if(0x1a==(int)*(rec+strlen(rec)-1)) *(rec+strlen(rec)-1)=0x00; if(0x0d==(int)*(rec+strlen(rec)-2)) *(rec+strlen(rec)-2)=0x00; else if(0x0a==(int)*(rec+strlen(rec)-1)) *(rec+strlen(rec)-1)=0x00; if(!*(rec) && feof(fp)) break;
#if PC_or_UNIX if(remove(rec)) continue; fprintf(stderr, "処理終了件数:%09d件目", cnt++); #else if(memcmp(rec, "d", 1)) continue; system(strcpy(uni+6, rec+60)); fprintf(stderr, "\033[5;7;41;37m処理終了件数:%09d件目\033[m", cnt++); #endif fprintf(stderr, "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); fprintf(stderr, "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); } fclose(fp); fprintf(stderr, "\n\t\t処理終了!!( ̄ー ̄)y-~~ニヤリ\n"); return (0); }
987 :
デフォルトの名無しさん :02/09/23 14:39
基本情報のテキストやってたらCの問題で memsetという関数がでてきたのですが、こんなの見た事ありません。 どーゆー関数なのでしょうか?そもそも基本情報レベルでこんな関数でてるのが疑問なのですが、
989 :
デフォルトの名無しさん :02/09/23 14:58
>>988 ところで、ご教示いただいたURLの目次一覧のようなページはないのでしょうか。
これ以上上に上がっていけません。
991 :
デフォルトの名無しさん :02/09/23 15:19
すぐ左上の「ライブラリ」をクリックすれば解決するのでは?
ちょっと聞きたいのですが。 C言語でプログラムを書いたんですが、バックグラウンドで 動かす(MS-DOSプロンプトウインドウを出さないで動かす)には、 どうすればよいのですか?
>>994 window messengerに登録して、
実行するときに
バックグラウンドで動かすように
しよう。
(/o\)
\(^O^)/
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。