C言語なら俺に聞け(入門編)Part 84
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/05/13(金) 01:00:54.51★前スレ
C言語なら俺に聞け(入門編)Part 83
http://hibari.2ch.net/test/read.cgi/tech/1304304298/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 147代目
http://hibari.2ch.net/test/read.cgi/tech/1301553333/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。
長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
0002デフォルトの名無しさん
2011/05/13(金) 01:04:10.300003デフォルトの名無しさん
2011/05/13(金) 01:42:29.63ロック処理もない。スレッドアンセーフティな関数を狙ったように使っている。スレッド間の通信で遠慮なくポインタでメモリコピーしている。
どうしたらよい?
0004デフォルトの名無しさん
2011/05/13(金) 01:44:09.83捨てる
100110111011101011 / 101001 =
100110111011101011 - (159467)
101001000000000000 = ... 0
010100100000000000 = ... 1 (83968)
010010011011101011 - (75499)
001010010000000000 = ... 1 (41984)
001000001011101011 - (33515)
000101001000000000 = ... 1 (20992)
000011000011101011 - (12523)
000010100100000000 = ... 1 (10496)
000000011111101011 - (2027)
000001010010000000 = ... 0
000000101001000000 = ... 0
000000010100100000 = ... 1 (1312)
000000001011001011 - (715)
000000001010010000 = ... 1 (656)
000000000000111011 - (59)
000000000101001000 = ... 0
000000000010100100 = ... 0
000000000001010010 = ... 0
000000000000101001 = ... 1 (41)
000000000000010010 (18)
100110111011101011 / 101001 = 0111100110001 ... 10010
159467 / 41 = 3889 ... 18
0006デフォルトの名無しさん
2011/05/13(金) 02:14:23.750007デフォルトの名無しさん
2011/05/13(金) 02:37:12.92> 親切なコンパイラだとちゃんと警告だしてくれるよ
それが>>990に対してのレスなら、いらぬお節介にもほどがあるねぇ。
pragmaあたりでその警告を抑制することはできるのかい?
http://hibari.2ch.net/test/read.cgi/tech/1304304298/992
> >>978
> > 配列のインデックスとかループの回数とかイチイチ 64bit になってたら勿体ないっしょ。
>
> ループカウンタなんて大抵レジスタだし、メモリにとっても高が4バイト増えるだけだろ。
> 勿体ないって、今時どんだけ節約志向なんだよ。(w
いまどきレジスタは節約しなくていいものになってるのか
0008デフォルトの名無しさん
2011/05/13(金) 06:21:06.73>いまどきレジスタは節約しなくていいものになってるのか
32bit コードにすればレジスタの節約になるとでも?
0009デフォルトの名無しさん
2011/05/13(金) 07:08:40.05残りの上半分を別のことに使えるわけじゃないしな
0010デフォルトの名無しさん
2011/05/13(金) 07:38:35.010011デフォルトの名無しさん
2011/05/13(金) 07:42:15.18http://hibari.2ch.net/test/read.cgi/tech/1301553333/668
0012デフォルトの名無しさん
2011/05/13(金) 08:22:54.990013デフォルトの名無しさん
2011/05/13(金) 16:01:40.01しねたこ
0014デフォルトの名無しさん
2011/05/13(金) 16:21:57.18プログラム自体にコピーガードってつけれるの?
ってかコピーガードってどーゆー仕組みよ?
0015デフォルトの名無しさん
2011/05/13(金) 16:36:11.83http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%94%E3%83%BC%E3%82%AC%E3%83%BC%E3%83%89
0016デフォルトの名無しさん
2011/05/13(金) 17:31:02.13visual studio2010 でコンパイル可能な
お勧めの多倍長演算の方法を教えていただけないでしょうか?
0017デフォルトの名無しさん
2011/05/13(金) 17:40:01.610018デフォルトの名無しさん
2011/05/13(金) 20:14:06.460019デフォルトの名無しさん
2011/05/13(金) 20:21:55.210020デフォルトの名無しさん
2011/05/13(金) 20:28:45.32そういうものだって覚えればいいだけ
0021デフォルトの名無しさん
2011/05/13(金) 20:31:10.08付けたくなきゃ付けなきゃいい。
0022デフォルトの名無しさん
2011/05/13(金) 20:43:21.53<<
>>
ってかわいいよね
0023デフォルトの名無しさん
2011/05/13(金) 20:44:01.61for(;;)
0024デフォルトの名無しさん
2011/05/13(金) 20:44:20.660025デフォルトの名無しさん
2011/05/13(金) 20:51:02.42静的変数だけで済んでしまうんですが
0026デフォルトの名無しさん
2011/05/13(金) 20:57:13.880027デフォルトの名無しさん
2011/05/13(金) 21:02:20.750028デフォルトの名無しさん
2011/05/13(金) 21:08:10.64サンスコ、自分捨てたほうが早いから辞めるわ。踏ん切りついた。
0029デフォルトの名無しさん
2011/05/13(金) 22:00:09.620030デフォルトの名無しさん
2011/05/13(金) 22:03:23.77staticかわいいよstatic
0031デフォルトの名無しさん
2011/05/13(金) 22:06:59.58ローバル変数って、プログラムの実行環境で一旦セットしたら後は参照だけとか、
編集バッファのように、一時的に利用するものだと、使い回せて便利かなって思う
0032デフォルトの名無しさん
2011/05/13(金) 22:26:18.94>>9 >>10
0033デフォルトの名無しさん
2011/05/13(金) 22:27:51.90AMD64/Intel 64 ではそれができない
0034デフォルトの名無しさん
2011/05/13(金) 22:28:15.52そのプログラムは使いまわせて楽かもしれんが、他のプログラムが使えなくなるからヤメテw
0035デフォルトの名無しさん
2011/05/13(金) 22:32:38.920036デフォルトの名無しさん
2011/05/13(金) 22:57:35.23無理にローカル変数化ってどんなの?
0037デフォルトの名無しさん
2011/05/13(金) 23:15:08.090038デフォルトの名無しさん
2011/05/13(金) 23:15:26.05#include<stdio.h>
#include<stdlib.h>
int main(void){
double test[5][5]= {1,0,0,0,0,
0,1,0,0,0,
0,0,1,0,0,
0,0,0,1,0,
1,0,0,0,1
};
double** x;
x = test;
printf("ad1=%d\n",*(x));
printf("ad2=%d\n",*test);
return0;
}
とすると、
>ad1=0
>ad2=2358912
のような結果が返ってきます
両方とも、配列test[0]の先頭アドレスを表示させる意図なのですが、
どうしてad1=0となってしまうのでしょうか?
0039デフォルトの名無しさん
2011/05/13(金) 23:16:51.020040デフォルトの名無しさん
2011/05/13(金) 23:46:14.80「二次元配列」と「ポインタのポインタ」が全然違うから
double (*test)[5] でやってごらん
0041デフォルトの名無しさん
2011/05/13(金) 23:49:27.63printf("ad1=%X\n",x);
printf("ad2=%X\n",*test);
0042デフォルトの名無しさん
2011/05/14(土) 00:12:17.85うまく行きました!
二次元配列はポインタのポインタ的なデータ構造ではなかったのですね
ところで、それで宣言されたtestには何が入ってるのでしょうか?
testには最初の一次元配列の先頭アドレスが入ってると思ったのですが、調べてみたら、
最初の一次元配列の先頭の要素が入ってるようなのです。printf("%X",test);で調べてみると・・・
では、二次元配列の任意の要素をtestから参照するにはどうしたら良いのでしょうか?
0043デフォルトの名無しさん
2011/05/14(土) 00:20:53.90test[1][2]とか出来るっしょ
testはdouble [5]への配列へのポインタだから最初のtest[1]でそのオフセットが
自動的に計算される
0044デフォルトの名無しさん
2011/05/14(土) 00:35:57.98testは配列だから、何が入っているかといえば、初期化子で与えた値が入っている。
testを評価した結果が何になるかといえば&test[0]と同等。
※&, sizeofの被演算子になる場合は例外
0045デフォルトの名無しさん
2011/05/14(土) 00:37:42.80#include<stdio.h>
#include<stdlib.h>
int main(void){
double (*test)[5]= {1,1,1,1,1,
0,1,0,0,0,
0,1,1,0,1,
1,0,1,1,0,
1,1,0,0,1
};
printf("12=%f\n",test[1][2]);
return0;
}
で試してみると、プログラムが止まってエラーが出てしまいます・・・
0046デフォルトの名無しさん
2011/05/14(土) 00:42:26.12それじゃだめだよ
#include<stdio.h>
#include<stdlib.h>
int main(void){
double test[5][5]= {1,0,0,0,0,
0,1,0,0,0,
0,0,1,0,0,
0,0,0,1,0,
1,0,0,0,1
};
double (*x)[5] = test;
printf("ad1=%d\n",*x);
printf("ad2=%d\n",test);
printf("12=%f\n",x[1][2]);
return0;
}
0047デフォルトの名無しさん
2011/05/14(土) 00:49:46.062次元配列の正しい初期化は
double (*test)[5]= {{1,1,1,1,1}
, {0,1,0,0,0}
, {0,1,1,0,1}
,{1,0,1,1,0}
,{1,1,0,0,1}
};
それと45のコードでtestはポインタで、有効なメモリ領域を指していない。
0048デフォルトの名無しさん
2011/05/14(土) 00:55:42.53たとえば
char a;
int b;
b = (int)a * 5; ・・・�@
b = a; ・・・�A
とした場合、�@で変数aは一時的にint型のように扱われると思いますが
�Aの処理時は変数aは再キャストしなくてもchar型に戻っていますか?
0049デフォルトの名無しさん
2011/05/14(土) 00:57:59.160050デフォルトの名無しさん
2011/05/14(土) 00:59:50.25うまくいきました!
ところでdouble (*x)[5];←これは何を意味してるのでしょうか?
double型の変数のポインターを5個格納する配列を作ったという事ですか?
それとも、アドレス演算に関して、番地を然るべきだけ、つまり五個ずつ飛ばしてくれる、
つまり、x+1でdouble型の値の入った番地の五個先を示してくれるという事ですか?
それが配列のデータ構造という事ですか?
0051デフォルトの名無しさん
2011/05/14(土) 00:59:58.47戻るって言うか別に変化してない
�@ではaから取り出した値を計算したり代入したりするときにint型として扱うイメージでどうぞ
0052デフォルトの名無しさん
2011/05/14(土) 01:01:22.88逆
double型を5個格納する配列へのポインタを宣言してる
0053デフォルトの名無しさん
2011/05/14(土) 01:08:32.29式 a の返り値をintにしてるだけだから
変数としてのa自体は関係ない。
あくまで式な。
0054デフォルトの名無しさん
2011/05/14(土) 01:10:50.64double *test1[5]; //a
double (*test2)[5]; //b
double *(test3[5]); //c
のうちaとcは何を表しているのか?
0055デフォルトの名無しさん
2011/05/14(土) 01:19:53.33なるほど・・・
少し分かって来ました
・・・ところで、自分は二次元配列を引数とする関数を作ろうと思ってたのですが、
任意の配列のサイズに対応出来る関数というのは難しいですか?
プロトタイプは
void func(double (*x)[]);
とすべきですか、それとも
void func(double x[][]);
とすべきですか?
プロトタイプにマジックナンバーは使用したくないのですが、
どうも値を入れないとうまくコンパイルが通らないのです。
何かうまい方法はありませんかね・・・
0056デフォルトの名無しさん
2011/05/14(土) 01:25:06.68二次元配列を大きさ一切指定なし渡すのはCの仕様上無理だから諦めろあきらめろ
gcc拡張でいいならできないこともないが
メモリ上連続してることを利用してdouble * 型にキャストして渡すという方法とかあるよ
0057デフォルトの名無しさん
2011/05/14(土) 01:26:57.150058デフォルトの名無しさん
2011/05/14(土) 01:28:23.96じゃぁやってみろよ・・・・・・・
0059デフォルトの名無しさん
2011/05/14(土) 01:29:54.710060デフォルトの名無しさん
2011/05/14(土) 01:34:01.20配列というのは、二次元だろうが三次元だろうが一直線に並んでるもんなのですか?
int i,j;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%X\n",&x[i][j]);
}
}
で調べてみたら、値がちょうど8ずつ飛んでるのですが、
例えばsizeof(double)で、アドレス演算をint型で、強制的に(配列サイズ)*sizeof(double)で足してやれば、
配列アクセスを実現できますかね?
つまり、こういうやり方は、マシンに依存したりしてやらない方がいいとかありますかね?
0061デフォルトの名無しさん
2011/05/14(土) 01:36:24.00ありがとうございました。
0062デフォルトの名無しさん
2011/05/14(土) 01:36:55.06二次元配列では難しいが、ポインタのポインタなら割と簡単に出来る
配列のアクセスも x[1][2] と同じ形に書ける
やっている事は違うし少し速度も落ちるが・・・・
それにポインタのポインタは行へのポインタ配列をmalloc()などで割り
付けて、さらにそれぞれに行の領域をmalloc()等で割り付けなければ
ならない
お行儀のよいプログラムにしたいのならプログラム終了前に逆順で
free()
0063デフォルトの名無しさん
2011/05/14(土) 01:39:08.600064デフォルトの名無しさん
2011/05/14(土) 01:40:19.48機械に依存しない形でも書けるけど速度は保証されないぞ
2^Nのサイズのデータをアクセスする時は大抵CPUのシフト命令を
うまく使って高速化している(x86ならスケールドアドレッシング)。
それを式で書くと定数ならばシフトに直してくれる可能性もあるが、
変数にsizeof()を代入しておく形にするとコンパイラは予めサイズを
知る術がないのでMUL命令を呼び出す事になるだろう
それならポインタのポインタの方がいいと思う
0065デフォルトの名無しさん
2011/05/14(土) 01:48:55.47>>60
その技法をやるときは[i * M + j] みたいなアクセスするだけでいいんじゃないかな
それ以前にポインタにint型で1足すとそのサイズ(doubleなら8とか)分進むんだよ
勘違いしてないか
その辺>>64の指摘もおかしいような
006660
2011/05/14(土) 01:49:59.84一直線に並んでるって保証があれば、これ>>60でいきたいと思います。
今回は5×5=25だから、たまたま配列要素が一直線に並んでうまくいったとか、そういう事じゃないですよ・・・ね?
>>62
どうしても無理ならそっちで行きたいと思います
>>64
アドレス演算をintでやると効率が悪いという事ですか?
0067デフォルトの名無しさん
2011/05/14(土) 01:50:09.34だからそれ遅いって
ベンチマーク取ってみれ
できればデバッグ情報付けてコンパイラがどんなコード吐いているか見てみれ
0068デフォルトの名無しさん
2011/05/14(土) 01:55:58.37アドレスを(int)pでキャスト変換して、それに、SIZEを一次元の配列のサイズとして
p+i*sizeof(double)*SIZE+sizeof(double)*j
みたいな感じで考えてます。
0069デフォルトの名無しさん
2011/05/14(土) 01:55:58.64違う
2^Nの演算は2進数を基本としているコンピュータではもの凄く速い
しかしMUL、つまりかけ算命令はどんな数を掛けるか分からないので
大抵はマイクロコードかSRT法で作られているので遅い
逆に言えばsizeof()が2^Nになりそうにない構造体などの多次元配列
を使うならベンチマークを取って見るべきだろう
要素数にもよるがポインタの配列なら2次キャッシュに載るだろうが、
ポインタ配列が指すポインタ配列(3次元配列もどき)だとメモリアクセスが
2回になってL2キャッシュからあふれる可能性が出てくる
何をやらせようとしているのか頭の中でイメージが描けなければこの辺りは
難しいかも
0070デフォルトの名無しさん
2011/05/14(土) 01:57:35.05いや、速度の話じゃなくて
sizeof(double) どこに使う必要あるんだよwwwwっていう話なんだが
と思ったらアドレスをint型に変換してるのか・・・・・・
普通はdouble *型じゃね?
0071デフォルトの名無しさん
2011/05/14(土) 01:57:38.87SRT法は除算だろ
掛け算は筆算+シフトで行うしかない
0072デフォルトの名無しさん
2011/05/14(土) 02:01:47.83int型への変換は変換すること自体が非常にまずい
pはdouble *型に変換して
*(p + i * SIZE + j)とかp[i * SIZE + j]でいいよ
0073デフォルトの名無しさん
2011/05/14(土) 02:03:44.22まるほど・・・つまり、巨大な配列の場合、各要素にアクセスする時に、
配列の各要素のサイズが2^nの形である事を予めコンピュータが知ってる
(通常のアドレス演算の時はもちろん知ってる)でないと、うまく速度が出ないという事ですか?
自分は、せいぜい100×100程度の二次元配列を想定してるのですが、何度もこれにアクセスするとなると
コンピューターに目に見えて負担がかかったり遅くなったりするって事ですか?
0074デフォルトの名無しさん
2011/05/14(土) 02:09:51.73intだと、桁あぶれしちゃうかもって事ですか?
アドレスは離散的な値なのでintにしたんですが・・・
>>72
なるほど、double*型だと、1足すだけで、アドレスを一個進められますね
そっちでいきたいと思います
0075デフォルトの名無しさん
2011/05/14(土) 02:18:48.86目に見えて遅くなるかどうかはCPUのL1/L2/L3キャッシュの容量にもより
何とも言えない
メモリアクセスを減らしたいなら>>68みたいにsizeof()で決め打ちすれば
コンパイル時に定数になるからかなりコンパイラが最適化してくれる可能性
が出てくる
それに二次元配列なら目的のアドレスを得るのに掛かるメモリアクセスは
たかだか1回なのでそんなに問題にならないだろう
俺がポインタのポインタを勧めるのは、C++が vector<vector<double> > と
いう形でコンテナで実現している方法が似ているからだ
ただしコンテナはmalloc()/free()は一切必要ないしメモリリークの危険性もない
0076デフォルトの名無しさん
2011/05/14(土) 02:22:03.540077デフォルトの名無しさん
2011/05/14(土) 02:56:16.84<例>
va_list arg;
argの第1引数 = 1; ★ここが知りたい
argの第2引数 = 2; ★
argの第3引数 = 3; ★
vsprintf( "第1:%d 第2:%d 第3:%d" , arg );
出力 ⇒ 第1:1 第2:2 第3:3
0078デフォルトの名無しさん
2011/05/14(土) 04:03:55.830079デフォルトの名無しさん
2011/05/14(土) 04:49:19.71⇢
⇨
→
0080デフォルトの名無しさん
2011/05/14(土) 06:23:31.78だね、初心者スレでアドレス演算の速度云々とか、バカとしか思えない。
無視して、まずな >>65 みたいな素直を書きかたするべき ⇒ >>55
>>77
まず va_list 使って何をしたいか書いてくれない?
0081デフォルトの名無しさん
2011/05/14(土) 07:43:04.33こんな感じで。
http://codepad.org/WWH8So5A
0082デフォルトの名無しさん
2011/05/14(土) 07:52:53.11va_list に関係ないが myprintf("%"); ってやられるとだめじゃね?
008382
2011/05/14(土) 08:22:58.05バグがありました。訂正します。
http://codepad.org/0xhhJAOs
0084デフォルトの名無しさん
2011/05/14(土) 08:30:41.91ご指摘感謝。
>>77
バグがありました。訂正します。
http://codepad.org/v9HI8tQT
0085デフォルトの名無しさん
2011/05/14(土) 09:10:41.41008677
2011/05/14(土) 10:58:51.66すいません、私の質問の仕方が悪かったです。
質問を変えます。
下記myprintf関数でva_startにて引数情報(argp)を取得した後、
例えばargpの引数情報が
第1引数: 10 (int型)
第2引数: 20 (int型)
第3引数: 30 (int型)
だとして、第1引数と第2引数の間に引数を追加したりする事は可能でしょうか?
va_listそのものを加工する事ができるかが知りたいです。
第1引数: 10 (int型)
第2引数: 50 (int型) ★この要素をリストに追加
第3引数: 20 (int型)
第4引数: 30 (int型)
int myprintf(char const *form, ...) {
int n;
va_list argp;
va_start(argp, form); // ←argp取得
n = myvfprintf(stdout, form, argp);
va_end(argp);
return n;
}
0087デフォルトの名無しさん
2011/05/14(土) 11:21:23.66直感として va_list を加工するのは無理なんじゃないかなぁ…
(おおよそ、呼び出し側の引数スタックの積み方を変えて操作することになるような気配
0088デフォルトの名無しさん
2011/05/14(土) 11:29:00.66スタックを直接弄るのは無理
自分で積み直して呼ぶのがいいよ
0089デフォルトの名無しさん
2011/05/14(土) 11:32:02.46移植性がない感じ
それにスタックはアドレス上位に向かって伸びて行くので、データスタックとリターンスタックが
同じスタックを使っているアーキテクチャでは無理に挿入すると暴走するような気が
009077
2011/05/14(土) 11:36:21.26基本的な事を忘れてました。
引数はスタックなのですね。
いじれるわけないですね。
ありがとうございました。
0091デフォルトの名無しさん
2011/05/14(土) 11:57:25.02int main(void)
{
printf("%f\n %f\n %f\n %f\n %f\n",0-4, 3.14*2, 5/3, 30%%7, (7+32)/5);
return 0;
}
ビルドエラーが起きました
間違いの指摘をお願いします
0092デフォルトの名無しさん
2011/05/14(土) 12:01:17.56009391
2011/05/14(土) 12:09:57.17回答ありがとうございます
変更したらビルドエラーは起きませんでしたが、実行結果はおかしくなりました
printfの文字列中では変換仕様に%を使うので%自体を入力するときには%%と記述するのではないでしょうか
0094デフォルトの名無しさん
2011/05/14(土) 12:16:23.200095デフォルトの名無しさん
2011/05/14(土) 12:20:57.38putsからにしろ。
0096デフォルトの名無しさん
2011/05/14(土) 12:30:21.76printf("%f\n %f\n %f\n %d\n %f\n",0-4.0, 3.14*2, 5.0/3, 30%7, (7+32)/5.0);
0097デフォルトの名無しさん
2011/05/14(土) 12:30:52.650098デフォルトの名無しさん
2011/05/14(土) 12:38:19.59「自分で積み直して」ってどうやるの?それってC言語だけでできるの?
0099デフォルトの名無しさん
2011/05/14(土) 12:40:12.47010091
2011/05/14(土) 12:41:17.30ありがとうございます、できました
なぜ%%と書かないで%と書くのでしょうか、>>94さんの言っている第一引数がわかりません
ググってみましたがピンと来なかったので説明お願いします
0101デフォルトの名無しさん
2011/05/14(土) 12:44:55.12printf書式文字列 = 第一引数 = 文字列リテラル = "%f\n %f\n %f\n %d\n %f\n" の中の話
0102デフォルトの名無しさん
2011/05/14(土) 12:47:13.82ということは、%%と書くということではないのでしょうか
010391
2011/05/14(土) 12:50:16.83文字を出力するときに%%と書くのですね
ご協力ありがとうございました
0104デフォルトの名無しさん
2011/05/14(土) 12:51:25.43ここにくるより入門書からやり直せ
0105デフォルトの名無しさん
2011/05/14(土) 13:12:40.07教えてください、お願いします。
0106デフォルトの名無しさん
2011/05/14(土) 13:27:37.62積み直し専用関数を作り、va_listからsprintf()で積まれたリストを取り出す
それをもう一度myprintf2()などを作ってそこで挿入したい引数を入れると良い
引数に応じてatoi()などが必須になるのは当然なので
0107デフォルトの名無しさん
2011/05/14(土) 13:32:30.30format で要求している引数数 と 実際に引数に詰まれた数が異なるので、その手法は使えないんじゃね?
myprintf("%d %d %d", 1 2);
こう呼び出しといて、出力結果が 1 100 2 となるようなのを望んでいるように見受けられるが
0108デフォルトの名無しさん
2011/05/14(土) 13:33:28.90○ myprintf("%d %d %d", 1, 2);
0109デフォルトの名無しさん
2011/05/14(土) 13:41:20.95ひでえな
そういうのはCでは禁じ手だ
0110デフォルトの名無しさん
2011/05/14(土) 13:47:52.79myprintf("%d %%d %d %%d", 1, 2); /* 2番目, 4番目に注目 */
void myprintf(const char* form, ...)
{
char buf[でっかく];
va_list argp;
va_start(argp, form);
vsprintf(buf, form. argp); /* この段階で buf[] は "1 %d 2" */
va_end(argp);
/* 以下挿入していく項目を詰む */
printf(buf, 100, 200);
}
0111デフォルトの名無しさん
2011/05/14(土) 13:57:33.84ああなるほどvsprintf()を使ってva_listを引数に取る方法があったか
0112デフォルトの名無しさん
2011/05/14(土) 14:06:40.27○ vsprintf(buf, form. argp); /* この段階で buf[] は "1 %d 2 %d" */
ちゃんと推敲しろよ俺orz
0113デフォルトの名無しさん
2011/05/14(土) 14:39:01.73それって書式文字列を自前パーズするってことだよね?
だとしたら、分解して複数回に別けてprintfするだろうから
積み直しっていう言葉からは遠いような希ガス
0114デフォルトの名無しさん
2011/05/14(土) 14:56:15.540115デフォルトの名無しさん
2011/05/14(土) 15:02:24.79負の値のビットシフトは未定義とか
俺は今までそんな変な動作をする処理系に出会ったことはないけれど
0116デフォルトの名無しさん
2011/05/14(土) 15:05:59.55どうも
今後は気をつけて使うようにする
0117デフォルトの名無しさん
2011/05/14(土) 15:53:59.720118デフォルトの名無しさん
2011/05/14(土) 16:15:49.73なんであんなに面倒なの
0119デフォルトの名無しさん
2011/05/14(土) 16:22:09.91どう使うって
union {
int a;
char b[4];
} hoge;
hoge.b[0] = 'a'; hoge.b[1] = 'b'; hoge.b[2] = 'c'; hoge.b[3] = 'c';
printf("%d\n", hoge.a);
みたいにするだけだろ。
何のために必要とか言うなら、必要になるまで知らなくてもいい機能だから
無視しとけ。
0120デフォルトの名無しさん
2011/05/14(土) 16:34:22.950121デフォルトの名無しさん
2011/05/14(土) 16:41:10.17例えば、固定長レコードでファイルに入出力する処理があるとするじゃない?
各固定長レコードは、いろんなデータがそれぞれのフォーマットで格納されてて、
実際に読んでみないと、その内容が分からないとする。
そしたら、例えば先頭1バイトにその書式情報を入れておいて、
残りはそれぞれのデータごとに格納すればいい。
先頭1バイトと残りの領域を定義するstructを設計し、
その残りの領域を、unionを使って、好きに割り当てて使えばいい。
どのフォーマットかは、先頭の1バイトで判断すればいいよね。
0122デフォルトの名無しさん
2011/05/14(土) 16:46:43.85そんな使い方するためのものじゃねーよ。
どんだけ低能だな。
0123デフォルトの名無しさん
2011/05/14(土) 16:59:15.48後は、例えば
union HOGE { double d; unsined int n[2]; } hoge;
みたいにして浮動小数点IEEE754形式を直接操りたい時とか
0124デフォルトの名無しさん
2011/05/14(土) 17:48:44.560125デフォルトの名無しさん
2011/05/14(土) 17:54:44.66あまり複雑ならswitch caseにしちゃうのもあり
0126デフォルトの名無しさん
2011/05/14(土) 17:57:41.12soket の INET_ADDR_IN はそういう実装してるような気がした
0127デフォルトの名無しさん
2011/05/14(土) 18:08:16.30奇数という条件なら
if (n%2)
と簡単にかけるんだけどな
0128デフォルトの名無しさん
2011/05/14(土) 18:19:15.300129デフォルトの名無しさん
2011/05/14(土) 18:22:02.780130デフォルトの名無しさん
2011/05/14(土) 18:24:06.20直感的には
n == 1 || 3 || 7
と書きたい
0131デフォルトの名無しさん
2011/05/14(土) 18:24:41.74unsined → unsigned
soket → socket
けど、この手はコンパイラが見つけてくれるので気にしないw
0132デフォルトの名無しさん
2011/05/14(土) 18:25:27.22って並べちゃおうw
0133デフォルトの名無しさん
2011/05/14(土) 18:27:22.72それもイイけど、元の質問者は if 文でと前提条件付けてんだからw
0134デフォルトの名無しさん
2011/05/14(土) 18:27:41.940135デフォルトの名無しさん
2011/05/14(土) 18:36:27.88if( $n ~~ [1, 3, 7] )
0136デフォルトの名無しさん
2011/05/14(土) 18:46:03.47n = 0 と 15, 31, 63 で true になるぞ。
0137デフォルトの名無しさん
2011/05/14(土) 19:03:15.240138デフォルトの名無しさん
2011/05/14(土) 19:04:10.84おめでてーな
0139デフォルトの名無しさん
2011/05/14(土) 19:08:09.94面白いと思って一生懸命考えたんだよ、察してやれよ。
0140デフォルトの名無しさん
2011/05/14(土) 19:09:19.050141デフォルトの名無しさん
2011/05/14(土) 19:13:13.66()がたりない
0142デフォルトの名無しさん
2011/05/14(土) 19:13:52.16正解
0143デフォルトの名無しさん
2011/05/14(土) 19:31:35.26if (n&!((n- (n+10)%10)|(n&(n+1))))
0144デフォルトの名無しさん
2011/05/14(土) 20:15:08.41if ( n>0 && n<10 && !(n&(n+1)) )
0145デフォルトの名無しさん
2011/05/14(土) 20:25:13.81俺の部下がこんなコード書いてきたら、速攻で没にする。
簡単じゃないという理由以前に、10 なんてわけわからない
直値が入ってるから。
0146デフォルトの名無しさん
2011/05/14(土) 20:33:05.110147デフォルトの名無しさん
2011/05/14(土) 20:38:40.620148デフォルトの名無しさん
2011/05/14(土) 20:57:29.48ただし n=0..31 に限る
0149デフォルトの名無しさん
2011/05/14(土) 21:56:27.360150デフォルトの名無しさん
2011/05/14(土) 21:58:44.03NULLポインタは規格上ではどこも指していないポインタで、実装上はアドレスの0番地を指すポインタ
これはソフトウェア上で0番地を指すようにしてるだけで、ハードウェア上の0番地とは関係ない
0151デフォルトの名無しさん
2011/05/14(土) 22:10:39.470152デフォルトの名無しさん
2011/05/14(土) 22:18:42.350153デフォルトの名無しさん
2011/05/14(土) 22:29:12.33言えるのは、NULLの入ってるポインタが0とは限らない。
NULLがアドレスの0以外の処理系でも、
p = NULL;
if (p == 0) … は真となる。
ということ。
0154デフォルトの名無しさん
2011/05/14(土) 22:43:17.03NULLは0だよ普通に。
余計なこと考える必要はない。
0155デフォルトの名無しさん
2011/05/14(土) 22:55:17.27ちゃんと規格を読め
0156デフォルトの名無しさん
2011/05/14(土) 23:03:13.030157デフォルトの名無しさん
2011/05/14(土) 23:08:22.15いや、NULL と書くべきところを全部 0 にしても全く問題ない。
コンパイラは賢いから、null ポインタと解釈すべきところを、基本、心得ている。
ただし。
・プロトタイプ宣言してね。前方参照は苦手なの。
・可変長引数に null ポインタを書くときは、キャストしてね。
0158デフォルトの名無しさん
2011/05/14(土) 23:10:30.350159デフォルトの名無しさん
2011/05/14(土) 23:12:57.26それ以外の何物でもない。
0160デフォルトの名無しさん
2011/05/14(土) 23:16:17.58b) 実行コードのアドレス
どっちなのかはっきりしろよ。
a) は 0 で、b) は処理系定義で実際 0 でない処理系も普通にある。
0161デフォルトの名無しさん
2011/05/14(土) 23:21:10.54だから何の変哲もなく、ただの0に過ぎない。
EOF が -1 なのと一緒。
値に意味があるわけじゃなくてただの決めごと。
0162デフォルトの名無しさん
2011/05/14(土) 23:51:44.56EOFが-1とNULLが0はちょっと違う。
0163デフォルトの名無しさん
2011/05/15(日) 00:08:12.84どっちもそうだと決めただけのものだろ。
0164デフォルトの名無しさん
2011/05/15(日) 00:09:10.560165デフォルトの名無しさん
2011/05/15(日) 00:19:22.39NULL (正確にはヌルポインタ) は、ソース上は 0 であることが、言語仕様で
決まっている。また、実際の値が 0 であるかどうかは処理系ごとに違う。
EOF は、単に主要なライブラリがそう決めてるだけ。
0166デフォルトの名無しさん
2011/05/15(日) 00:26:09.88たとえばヌルが0xFF00の処理系があったとして、
p = 0;
と書けば0xff00がpに入る。
そういう意味では0はNULLと決まってる。
EOFは単純に-1
0167デフォルトの名無しさん
2011/05/15(日) 00:28:18.96変な誤解はやめとめ。
0168デフォルトの名無しさん
2011/05/15(日) 00:31:18.90つ MS-DOS/i8086
メモリモデルによっては、null ポインタは 0 ではなく、容易にオフセット 0 を書き換えてしまうことが可能であった。
0169デフォルトの名無しさん
2011/05/15(日) 00:40:55.800170デフォルトの名無しさん
2011/05/15(日) 00:42:08.31http://www.kouno.jp/home/c_faq/c5.html#17
0じゃない環境の例
0171デフォルトの名無しさん
2011/05/15(日) 00:48:40.260172デフォルトの名無しさん
2011/05/15(日) 00:52:06.13#if 0
#endif
0173デフォルトの名無しさん
2011/05/15(日) 00:52:55.62後者の方が実行速度はやくなる?
0174デフォルトの名無しさん
2011/05/15(日) 00:55:29.60その環境で実測しないと分からないけど、普通は後者のほうが速い。
0175デフォルトの名無しさん
2011/05/15(日) 00:56:41.110176デフォルトの名無しさん
2011/05/15(日) 00:57:27.60一番使うのは #if 0 〜 #endif、/* 〜 */ にするとネストするときがあるから
後は #if defined(foo) || defined(boo) みたいな感じで
0177デフォルトの名無しさん
2011/05/15(日) 01:00:20.46わからない。
関数呼び出しのコストが削減できるので早くなるかもしれないし、
同じ関数を複数回呼び出していたのをインラインに展開することで、
キャッシュに入らなくなって遅くなるかもしれない。
まずはそんなこと考えずに、普通に書いて測定によって関数呼び出し
がネックになっていたら書き換えればいい。
0178デフォルトの名無しさん
2011/05/15(日) 01:02:38.90厳密にいえば差はある。
その差を重要視するか、それとも記述性・表現性・ドキュメント性の方を重視するか、の判断はおまかせする。
0179デフォルトの名無しさん
2011/05/15(日) 01:08:03.13NULLはゼロじゃない場合も結構あるよ。
Visual Studio2010は確か、4か7だった気がする
0180デフォルトの名無しさん
2011/05/15(日) 01:10:08.450181uy
2011/05/15(日) 02:12:10.57173とか正直に「 わからない 」といえば?w
まず、コンパイラごとの最適化の様子を見ないとわからない
そのコンパイラにとっては、関数分けしたほうが速いコード出すかもしれないし
直接かいたほうが速いかもしれない
結局そこまで気にするならアセンブラで直に書くしかない
0182デフォルトの名無しさん
2011/05/15(日) 02:17:22.090183デフォルトの名無しさん
2011/05/15(日) 03:56:52.25連立一次方程式をガウスジョルダン消去法で解く
26行目のconst int N=300; を適当に変えて実験してみてくれ
なおWin32専用
俺の環境では配列の方がポインタのポインタより3倍ほど速い
ポインタからポインタをたどる時に外部メモリへのアクセスが生じて
パイプラインがストールするからだと考えられる
その影響はFMULより大きいわけだ
http://codepad.org/CugYeECJ
Core i7 のようなメモリバンド幅が広いシステムならこの差は縮まるはず
0184デフォルトの名無しさん
2011/05/15(日) 04:03:31.99jj=5になります。
jj=6のはずなのに何故なんですか?
0185デフォルトの名無しさん
2011/05/15(日) 05:37:35.27jjの型が整数型なら、実数から整数への変換の際に切り捨てが発生してしまっています。
誤差をフォローするから、実数に頼らない演算にするしかありません。
0186デフォルトの名無しさん
2011/05/15(日) 08:24:45.85うちのi7 3.5GHzでは
配列: 23934
ポインタ: 26539
0187デフォルトの名無しさん
2011/05/15(日) 08:46:08.43std::srand std::rand を srand rand に変更した@VS2008
それに、掛け算がどうとかいう話が出てた気がするので、単ポインタ版のtest3を追加。
http://codepad.org/MFRpvUlm
/Od (差は明確)
test1 : 2d array
Time Counter = 146366
test2 : pointer to pointer array
Time Counter = 210979
test3 : pointer
Time Counter = 171837
/O2 (誤差程度)
test1 : 2d array
Time Counter = 23299
test2 : pointer to pointer array
Time Counter = 23787
test3 : pointer
Time Counter = 23627
0188187
2011/05/15(日) 08:49:30.900189デフォルトの名無しさん
2011/05/15(日) 10:21:54.970は0だから。
今まで"b"を付けていたfopenの処理を"b"を外すことで何か不具合が起こることってありますか
0191デフォルトの名無しさん
2011/05/15(日) 13:14:53.25Linux系ならなにも変わらない
Windows系なら以下を参照
http://msdn.microsoft.com/ja-jp/library/yeby3zcb(v=vs.80).aspx
0192デフォルトの名無しさん
2011/05/15(日) 13:18:50.30このテーブル?を複数同時進行させることはできますか?
srand(10)のrand()取得したら、次はsrand(5)のrand()取得みたいな感じで
毎回srand()呼ぶとrand()が一緒になってしまうのです
何度呼び出したか記憶するという方法はできそうですが
それ以外ありますか?
0193デフォルトの名無しさん
2011/05/15(日) 13:20:14.980194デフォルトの名無しさん
2011/05/15(日) 13:28:01.31#include <time.h>
srand(time(0));
0195デフォルトの名無しさん
2011/05/15(日) 13:33:32.36なんでそんなことがしたいの?
0196デフォルトの名無しさん
2011/05/15(日) 13:37:50.68代替品を自分で作るかどっかからパクってくる
疑似乱数でぐぐればいくらでも見つかるだろう
0197デフォルトの名無しさん
2011/05/15(日) 13:40:05.05通常は、システム毎に改行コードが違うのを吸収するための仕組みがあるんだが、
それを b 付けると解除するようになるだけ。
0198デフォルトの名無しさん
2011/05/15(日) 13:43:33.20まず、それはできません。
あと、擬似乱数が十分に乱数に近いものであれば、それは意味がありません。
普通に rand() で順番に取り出せば十分です。
それで結果が思わしくないようであれば、メルセンヌツイスタ(日本発)などの高性能なアルゴリズムを使えばいいと思います。
0199デフォルトの名無しさん
2011/05/15(日) 13:45:22.11もしかして、再現性のある乱数のラインが二本ほしいってことかな?
0201デフォルトの名無しさん
2011/05/15(日) 13:50:22.82左右対戦テトリスみたいな感じか。
0202192
2011/05/15(日) 13:50:27.09単純にランダム系列?がunsigned int では少ないと感じたことと
得られる結果をリプレイのように再生したいというのがあります
0203デフォルトの名無しさん
2011/05/15(日) 13:53:32.00int ほど大きくもないよ。
0204デフォルトの名無しさん
2011/05/15(日) 14:04:53.07おおさすがトリプルチャンネル&L2キャッシュ巨大
Nの大きさを大きくしてL2キャッシュからはみ出すようなテストをすると
差が出てくるかも
0205デフォルトの名無しさん
2011/05/15(日) 14:31:10.27BCCを使っていたらポインタのポインタ版は配列の3倍ほどになりましたが
VS2010を使ってReleaseでビルドしたらほとんど差が出ませんね
不思議だ・・・
0206デフォルトの名無しさん
2011/05/15(日) 14:32:14.080207デフォルトの名無しさん
2011/05/15(日) 15:15:01.44jj=(log(64)/log(2));
は6*(log(2)/log(2))=6とCはやってくらいということですか。
分かりました。
0208デフォルトの名無しさん
2011/05/15(日) 16:22:36.48CではBox[]とするとエラーが出ます。
なにか空宣言する方法ないのですか?または空宣言できないのですか?
0209187
2011/05/15(日) 16:34:19.71300*300*4/1024 = 351KiB
Core i7 860はL2キャッシュ256KB/コア、デュアルチャンネルだよ
>>206
最後が一番速いってのが誤差の範囲じゃないなら不思議だね
0210デフォルトの名無しさん
2011/05/15(日) 16:35:11.27ないので工夫しましょう
0211デフォルトの名無しさん
2011/05/15(日) 16:43:48.60俺のはAthlon64 X2 3800+だけど512KBL2×2かな?
でもdoubleなら300×300×8=702KiBでL2からはみ出ますよね
BCCではまともにポインタのポインタでメモリアクセスするのに対し
VS2010だと差が出ない
吐いたコードを見て見ようかな
0212デフォルトの名無しさん
2011/05/15(日) 16:57:44.06Cの配列はサイズを後から変えられないので空の配列なんか作れても何も入れられないし役に立たないし無意味です
0213デフォルトの名無しさん
2011/05/15(日) 17:12:10.350214デフォルトの名無しさん
2011/05/15(日) 17:16:01.160215デフォルトの名無しさん
2011/05/15(日) 18:13:30.04つvector
0216デフォルトの名無しさん
2011/05/15(日) 18:17:46.19入っているのですが、これを解放したいのでfree(hoge_ptr);とすると
warning C4090: '関数' : 異なる 'const' 修飾子です。
と怒られます。怒られないようにするにはどうすればよいでしょうか?
0217デフォルトの名無しさん
2011/05/15(日) 18:22:31.79スレタイ読める?
0218デフォルトの名無しさん
2011/05/15(日) 18:23:40.870219デフォルトの名無しさん
2011/05/15(日) 18:25:23.160220デフォルトの名無しさん
2011/05/15(日) 18:28:03.02constはがしてfreeする
0221デフォルトの名無しさん
2011/05/15(日) 18:36:58.24dbgheap.cの
!CheckBytes(pbData(pHead) + pHead->nDataSize, _bNoMansLandFill, nNoMansLandSize)
に引っかかって
_RPT3(_CRT_ERROR, "HEAP CORRUPTION DETECTED: after %hs block (#%d) at 0x%p.\n"
"CRT detected that the application wrote to memory after end of heap buffer.\n",
szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
pHead->lRequest,
(BYTE *) pbData(pHead));
で逝ってるみたいです。
Windows7(Enterprise)64bit、VisualStudio2008(Professional)です
0222デフォルトの名無しさん
2011/05/15(日) 18:49:51.05出てる通りのことを君のプログラムがしているんだよ、free() 以前の問題
0223デフォルトの名無しさん
2011/05/15(日) 18:58:10.83>入っている
これってどうやるの?
0224デフォルトの名無しさん
2011/05/15(日) 18:58:55.74関数の引数とか初期化とか
0225デフォルトの名無しさん
2011/05/15(日) 19:02:30.98お騒がせしました。
// 二徹休出するとアホがポロポロ出てくる……orz
0226デフォルトの名無しさん
2011/05/15(日) 19:06:19.32malloc(sizeof(struct HOGE)) と malloc(sizeof(*hoge_ptr)) のどっちがいいのかな?
0227デフォルトの名無しさん
2011/05/15(日) 19:06:37.85なんとなく定数しかできないものだと思ってた
0228デフォルトの名無しさん
2011/05/15(日) 19:12:30.35前者
0229デフォルトの名無しさん
2011/05/15(日) 19:31:04.64圧倒的に前者
0230デフォルトの名無しさん
2011/05/15(日) 19:34:14.86オレは前者をとる
0231デフォルトの名無しさん
2011/05/15(日) 19:34:22.37圧倒的に後者
前者とか言ってるのはアホ
0232226
2011/05/15(日) 19:36:30.77知ってたら教えて
0233デフォルトの名無しさん
2011/05/15(日) 19:36:33.53後者に一票
0234デフォルトの名無しさん
2011/05/15(日) 19:42:53.79後者なら、変数の型を変更したときでもそのままで動く
0235デフォルトの名無しさん
2011/05/15(日) 19:42:57.261. hoge = malloc(sizeof(*hoge)) の方が
hoge = malloc(sizeof(struct HOGE)) より間違いに気づきやすい。
2. hoge の型を struct HOGE から struct HAGE に変更した時に、
ここのコードを変更せずに済む。
あくまでも俺の考え方だが。
0236>>235
2011/05/15(日) 19:43:34.290237デフォルトの名無しさん
2011/05/15(日) 19:50:13.02hoge = malloc(sizeof(hoge)) と間違えることは結構ありそうと思うのは俺だけ?
どっちもコンパイラが警告できないのが嫌らしいけどね
0238デフォルトの名無しさん
2011/05/15(日) 19:53:36.49sizeofの中に書かれてるものを見てサイズがイメージできる方がオレは好きだ。
0239デフォルトの名無しさん
2011/05/15(日) 19:55:51.85個人差はあるけど、ぱっと見でオカシさに気付く人は多いだろう
0240デフォルトの名無しさん
2011/05/15(日) 20:07:22.04> hoge = malloc(sizeof(struct HOGE *)) と間違えることはめったにないけど
じゃなくて
struct HOGE {...} *hoge;
struct HAGE {...} *hage;
hoge = malloc(sizeof(struct HAGE))
のケース。
まあ、確かに
> hoge = malloc(sizeof(hoge)) と間違えることは結構ありそうと思うのは俺だけ?
のケースもあるから、微妙ではあるが...。
0241デフォルトの名無しさん
2011/05/15(日) 20:40:48.490242デフォルトの名無しさん
2011/05/15(日) 20:52:29.24int a;
sizeof a + 1
とかってやってたまに間違えるからつい習慣でw
0243デフォルトの名無しさん
2011/05/15(日) 21:01:40.950244デフォルトの名無しさん
2011/05/15(日) 21:03:56.80それとchar型で宣言しているのに'が必要なわけとか
0245デフォルトの名無しさん
2011/05/15(日) 21:08:12.40あと>>244は意味不明。
0246デフォルトの名無しさん
2011/05/15(日) 21:32:43.02括弧をつけないのがかっこいいと思ってるど素人さんですか?
初心者なら、初心者らしくしましょうね。
0247デフォルトの名無しさん
2011/05/15(日) 21:45:50.94prindf(("%s\n"),("Fack.","Hello, World."));
0248デフォルトの名無しさん
2011/05/15(日) 21:54:49.810249デフォルトの名無しさん
2011/05/15(日) 21:55:05.32LOGO
0250デフォルトの名無しさん
2011/05/15(日) 21:56:47.64for (;i<9;i++)
と
int i;
for (i=0;i<9;i++)
って違いあるの?
0251デフォルトの名無しさん
2011/05/15(日) 22:00:17.05int i;
for (i=9;i--;)
たまーに、ヌルポインタ参照してる!と言いがかりをつけられることが。
文脈的にも、「ある型のサイズ分確保したい」より「欲しいもののサイズ分確保したい」という方が素直な気がする。
配列として確保する場合はchar *arr = malloc(sizeof(arr[0]) * N); としたこともあったと思う。
>>244
'が必要ないとした場合を考えると
char c = a; /* a という文字で初期化 */
char c2 = c; /* c という文字で初期化なのか、変数 c の内容で初期かなのか判断できない */
char c = ; /* 構文エラーなのか、空白で初期化なのか判断できない */
などなどの弊害がたくさん。
0253デフォルトの名無しさん
2011/05/15(日) 22:02:45.27int i;
for (i=0;9-i;i++)
0254デフォルトの名無しさん
2011/05/15(日) 22:08:06.05> int i = 0;
> for (;i<9;i++)
キモチワルくない?
0255デフォルトの名無しさん
2011/05/15(日) 22:15:39.03mallocのmは想像がつくんだが
0257デフォルトの名無しさん
2011/05/15(日) 22:21:24.41新ANSI C言語辞典って本に標準関数の名前がなんの略かって書かれてるけど
今手元にない。
0258デフォルトの名無しさん
2011/05/15(日) 22:28:23.73int i;
for (i=-1;8-i++;)
Cell/Clear ALLOCateだそう
C言語辞典引っ張り出したの久しぶり。
K&Rは特に何も書いてなかった
0260デフォルトの名無しさん
2011/05/15(日) 23:17:17.60printf("\a");
ってやっても何も出ないんですが?
0261デフォルトの名無しさん
2011/05/15(日) 23:21:04.84http://wisdom.sakura.ne.jp/programming/c/Cdata1.html
ビープ音でも鳴るのかな?
0262デフォルトの名無しさん
2011/05/15(日) 23:26:13.880263デフォルトの名無しさん
2011/05/15(日) 23:30:33.74>>262
どうもです
0264デフォルトの名無しさん
2011/05/16(月) 05:59:08.04int a[10];
1.size = sizeof a / sizeof a[0];
2.size = sizeof a / sizeof *a;
0265デフォルトの名無しさん
2011/05/16(月) 06:19:15.87個人的には2を見たことがないので1の一択
0266デフォルトの名無しさん
2011/05/16(月) 07:50:04.00これを使って,小数点以下50桁のa,bを定義して
乗算するにはどのようなプログラムを書けばいいのでしょうか?
0267デフォルトの名無しさん
2011/05/16(月) 09:41:21.24ぱっとみた感じそのライブラリは指数の範囲を拡大するだけで精度は拡大しません
0268デフォルトの名無しさん
2011/05/16(月) 11:34:57.61ありがとうございます
指数の精度を高めるのにおすすめのライブラリをおしえていただけませんか?
0269デフォルトの名無しさん
2011/05/16(月) 11:40:30.290270デフォルトの名無しさん
2011/05/16(月) 11:41:14.58「指数部の精度」なんて概念はないぞ。大人しくポピュラーなものを使ったらどうだ?
つーか、そもそも目的が判らんとアドバイスの仕様もないな。
いずれにしても、このスレだとCの言語入門だからスレ違いだ。
0271デフォルトの名無しさん
2011/05/16(月) 12:40:16.550272デフォルトの名無しさん
2011/05/16(月) 12:41:43.88何も付けなければdouble
0273271 ◆WdD1pV9xBc
2011/05/16(月) 12:52:11.580274デフォルトの名無しさん
2011/05/16(月) 19:35:33.94http://ja.wikipedia.org/wiki/%E5%8D%81%E5%85%AD%E9%80%B2%E6%B3%95#.E4.B9.97.E7.AE.97.E8.A1.A8
を丸暗記するべきでしょうか?
0275デフォルトの名無しさん
2011/05/16(月) 19:51:28.75そんなもの暗算しても意味がない。
標準の calc.exe でも変換できるし。
0h〜Fh(0〜15) まで暗記すりゃ充分。
0276デフォルトの名無しさん
2011/05/16(月) 19:52:20.0716進数で00+FFはFFですが、FF+FFは何故FFなんでしょうか?
0277デフォルトの名無しさん
2011/05/16(月) 19:59:54.13そんなことないだろ
0278デフォルトの名無しさん
2011/05/16(月) 20:01:41.39そりゃ論理和なんじゃねーの?
OR ってやつな。
0 OR 0 → 0
0 OR 1 → 1
1 OR 0 → 1
1 OR 1 → 1
0279デフォルトの名無しさん
2011/05/16(月) 20:03:34.350280デフォルトの名無しさん
2011/05/16(月) 21:10:01.55ビットシフトはなんの役に立つのでしょうか?
0281デフォルトの名無しさん
2011/05/16(月) 21:24:58.39高速な計算
0282デフォルトの名無しさん
2011/05/16(月) 21:28:54.37僕もC言語をはじめたばかりでわからないのですが
ビットシフトでどのようなことが起こるのですか?
ビットシフト知っていること事態が凄いですよ
0283デフォルトの名無しさん
2011/05/16(月) 21:30:49.86けっこう暇つぶしになる
0284デフォルトの名無しさん
2011/05/16(月) 21:33:37.842進数で1ビットシフトする事は、2を描けたり2で割ったりする事に等しい
0285デフォルトの名無しさん
2011/05/16(月) 21:34:03.00その昔、マシン語のプログラムを作っていた頃はよく使いました。単純な 2^n 倍とか、CRC の計算とか、割り算掛け算の実装とか。
でも C でわざわざビットシフトを使わないといけない、という局面はそんなにない。(マスクパターンを作成するときくらいか。)
C はマシン語を置き換えてきた、という経緯から考えて、その昔、言語開発者が、努めてマシン語にある命令を C にも持ち込んできたのではないでしょうか。
0286デフォルトの名無しさん
2011/05/16(月) 21:36:17.70巨大なメルセンヌ素数みつけようぜwwwwwww
0287デフォルトの名無しさん
2011/05/16(月) 21:39:32.90シフト演算は大いに役立つ
あとC言語の最適化によく使われる
0288デフォルトの名無しさん
2011/05/16(月) 22:00:16.14もう少しプリミティブなところだとエンディアン変換とか
0289デフォルトの名無しさん
2011/05/16(月) 22:31:30.12高速化の定石なのかもしれません<ビットシフト
0290デフォルトの名無しさん
2011/05/16(月) 22:39:11.720291デフォルトの名無しさん
2011/05/16(月) 22:42:57.65頭が悪いのかわざとやってるのか
0292デフォルトの名無しさん
2011/05/16(月) 22:45:51.350293デフォルトの名無しさん
2011/05/16(月) 22:52:50.97最近のコンパイラなら勝手に最適化して置き換えてるんじゃね
0294デフォルトの名無しさん
2011/05/16(月) 22:58:54.330295デフォルトの名無しさん
2011/05/16(月) 23:09:01.21そういう話じゃない
0296デフォルトの名無しさん
2011/05/16(月) 23:11:32.94先生〜、ニカワじゃない、ニワカものばかりの僕達に的確かつ正確な回答をお願いしますよ
0297デフォルトの名無しさん
2011/05/16(月) 23:33:17.08面白いねー
0298デフォルトの名無しさん
2011/05/16(月) 23:37:07.540299デフォルトの名無しさん
2011/05/16(月) 23:49:19.960300デフォルトの名無しさん
2011/05/16(月) 23:54:32.35単に 2 で割るだけでよかったのかもしれません。失礼しました。
0301デフォルトの名無しさん
2011/05/17(火) 00:07:44.350302デフォルトの名無しさん
2011/05/17(火) 00:15:35.390303デフォルトの名無しさん
2011/05/17(火) 00:17:05.330304デフォルトの名無しさん
2011/05/17(火) 00:32:22.93stdlib.h
0305デフォルトの名無しさん
2011/05/17(火) 00:56:03.700306デフォルトの名無しさん
2011/05/17(火) 09:35:09.16http://www.jpcert.or.jp/sc-rules/
0307デフォルトの名無しさん
2011/05/17(火) 11:12:33.78>http://www.jpcert.or.jp/sc-rules/c-pre07-c.html
"??/" を使うの禁止されたら
リテラル文字列で改行とかするときに困るんじゃね?
どうすんの?
0308デフォルトの名無しさん
2011/05/17(火) 12:15:56.87"hogehoge
foo"
なら
"hogehoge"
"foo"
でいいよ
0309デフォルトの名無しさん
2011/05/17(火) 12:32:46.13bar"
とかやるの?
0310デフォルトの名無しさん
2011/05/17(火) 12:33:23.48向かってる方向が逆というオチ
0311デフォルトの名無しさん
2011/05/17(火) 12:36:54.23JIS 7 単位符号には存在しない文字だ。
"??/" が使えなかったらどうすんだよ?
0312デフォルトの名無しさん
2011/05/17(火) 12:44:29.340313デフォルトの名無しさん
2011/05/17(火) 12:56:05.18もし"??/" が使えなかったらどうすんだよ??
0314デフォルトの名無しさん
2011/05/17(火) 13:15:14.930315デフォルトの名無しさん
2011/05/17(火) 13:17:13.47UTF-8なら半角バックスラッシュあるだろ。
0316デフォルトの名無しさん
2011/05/17(火) 13:23:38.680317デフォルトの名無しさん
2011/05/17(火) 13:32:24.530318デフォルトの名無しさん
2011/05/17(火) 14:12:01.67くわしくw
0319よろしければ.....
2011/05/17(火) 17:23:40.78期限まで日数がないので.....
[1]授業単元:プログラミング
[2]問題文
二次元配列に保存された10組の計測データ
x 23 34 45 21 34 56 68 78 89 45
y 22 28 55 17 42 56 60 87 91 39
に対して最小二乗法により直線近似した場合
0320319の続きです。
2011/05/17(火) 17:26:07.78※二つの変数の相関係数を求めて出力しなさい。
[3]環境
[3,1] OS:恐らくWindows7
[3,2] コンパイラ名とバージョン:すいません、わかりません。
[3,3] 言語:C
[4]期限:2011年5月18日10時00分まで
コマンドプロンプトと秀丸を使っています。
0321デフォルトの名無しさん
2011/05/17(火) 17:48:41.84C/C++の宿題片付けます 147代目
http://hibari.2ch.net/test/read.cgi/tech/1301553333/
0322デフォルトの名無しさん
2011/05/17(火) 22:44:41.61program.cの計算結果をstdout.txtに出力したい場合どうすればいいですか?
0323デフォルトの名無しさん
2011/05/17(火) 22:48:17.07質問は正確にしないと捻くれた回答が来るよ。
0324デフォルトの名無しさん
2011/05/17(火) 22:53:08.40>コマンドプロンプトと秀丸を使っています。
こんな変な環境を指定してくる奴って何なんだろうな。
Turbo C 2.01 とかを使えば、統合開発環境などもそのまま使えるのに。
0325デフォルトの名無しさん
2011/05/17(火) 22:55:22.66すいません。
1+2
3×4
5÷1
4-2の
結果をstdout.txtに出力したいです。
0326デフォルトの名無しさん
2011/05/17(火) 23:07:33.49#include <stdio.h>
#define FILENAME "stdout.txt"
int main() {
FILE *fp;
if ((fp = fopen(FILENAME, "w")) != NULL) {
fprintf(fp, "%d\n", 1 + 2);
fprintf(fp, "%d\n", 3 * 4);
fprintf(fp, "%d\n", 5 / 1);
fprintf(fp, "%d\n", 4 - 2);
fclose(fp);
}
return 0;
}
/* end */
0327895の続きです。
2011/05/17(火) 23:15:43.51大学で今年から習い始めたばっかで、教師にこれを使うように言われてるんで!
0328デフォルトの名無しさん
2011/05/17(火) 23:17:58.10ありがとうございます。
0329デフォルトの名無しさん
2011/05/17(火) 23:22:45.750330デフォルトの名無しさん
2011/05/17(火) 23:26:29.23program.exe > stdout.txt
0331デフォルトの名無しさん
2011/05/18(水) 00:18:27.370332デフォルトの名無しさん
2011/05/18(水) 00:20:04.440333デフォルトの名無しさん
2011/05/18(水) 00:34:49.70ちゃんと開放できたか確認する方法はありますか?
0334デフォルトの名無しさん
2011/05/18(水) 00:40:06.83環境が判らんので具体的に回答できないから、「メモリリーク 検出」とかでぐぐってみるといいかも
0335デフォルトの名無しさん
2011/05/18(水) 00:44:46.73ありがとうございます
よさげなサイトがヒットしました
0336デフォルトの名無しさん
2011/05/18(水) 07:59:37.77単文、if文、while文でもいいと書いてますが、具体的にはどのようなコードになるのでしょうか?
C言語の理解度を突いてみる
http://d.hatena.ne.jp/bellbind/20081105/1225888377
0337デフォルトの名無しさん
2011/05/18(水) 08:26:10.28#include <stdio.h>
int main(int argc, char ** argv)
{
switch (argc) case 1: printf("%d\n", argc);
switch (argc) while (*++argv) {
printf("%s\n", *argv);
continue;
case 1:
printf("--\n");
}
return 0;
}
// 意味があるかは知らん
0338デフォルトの名無しさん
2011/05/18(水) 08:28:38.71switch (argc) while (*++argv) {
==
switch (argc) default: while (*++argv) {
++
0339デフォルトの名無しさん
2011/05/18(水) 08:29:59.41なるほど。
�d
0340デフォルトの名無しさん
2011/05/18(水) 08:38:10.06(char*)( p + 1 ) - (char*)p == sizeof *p
0341デフォルトの名無しさん
2011/05/18(水) 09:35:37.71いいえ。
0342デフォルトの名無しさん
2011/05/18(水) 09:37:57.67>337を見ても判るけど、ブロック化しても書けるのだから素直にブロック化した方がいい。
do whileもそうだね。
0343デフォルトの名無しさん
2011/05/18(水) 09:38:43.72どのような状況ならば成り立たないのでしょうか?
0344デフォルトの名無しさん
2011/05/18(水) 10:16:01.680345デフォルトの名無しさん
2011/05/18(水) 11:57:03.910346デフォルトの名無しさん
2011/05/18(水) 11:58:16.790347デフォルトの名無しさん
2011/05/18(水) 12:26:27.990348デフォルトの名無しさん
2011/05/18(水) 12:46:34.340349デフォルトの名無しさん
2011/05/18(水) 13:20:26.270350デフォルトの名無しさん
2011/05/18(水) 14:10:24.940351デフォルトの名無しさん
2011/05/18(水) 15:37:12.91そのスレ教えてもらえます?
0352デフォルトの名無しさん
2011/05/18(水) 15:42:53.870353デフォルトの名無しさん
2011/05/18(水) 16:08:32.68double d = 1.0;
whle (1) d+=1.0;
これで元の数に帰ってきますか?
0354デフォルトの名無しさん
2011/05/18(水) 16:10:10.05大抵はinfになる
0355デフォルトの名無しさん
2011/05/18(水) 16:43:47.88情報落ちでどこかで増加が止まる
http://ja.wikipedia.org/wiki/%E8%AA%A4%E5%B7%AE#.E6.83.85.E5.A0.B1.E8.90.BD.E3.81.A1
ここを参照
0356デフォルトの名無しさん
2011/05/18(水) 17:05:45.170357デフォルトの名無しさん
2011/05/18(水) 18:47:24.61単方向のリストは何も見ずに作れるようになったんですけれど、使いこなせているとは思えません。
自分のレベルが今どれくらいなのかや今後どのような練習をしていけばいいのかがいまいちわかりません。
今会社のほうで研修をやっているのですが、大学時代にCを勉強したこともありほとんどわかってる内容だったので。
0358デフォルトの名無しさん
2011/05/18(水) 18:50:10.14argvの引数文字列が自在に扱える、なんてのはどお?
0359デフォルトの名無しさん
2011/05/18(水) 19:13:08.00必要なものが必要な通りに作れれば、わかってるとか、わかってないとか
そんなものどうでもいいだろ。
0360デフォルトの名無しさん
2011/05/18(水) 19:15:57.00とりあえず巷で見かけるアルゴリズムは一通り自作してみたかい?
構造体ポインタは?コールバック関数(関数ポインタ)は?
このあたりまでできればもう覚える段階じゃない。いかに組み合わせて構想を実現するかだ。
0361デフォルトの名無しさん
2011/05/18(水) 20:09:24.81元の数に帰ってきた ^^;
double d = 1.0;
whle (1) *(char*)&d+=1.0;
0362デフォルトの名無しさん
2011/05/18(水) 20:13:16.950363デフォルトの名無しさん
2011/05/18(水) 20:14:13.15問題集買え
0364デフォルトの名無しさん
2011/05/18(水) 21:02:25.71以下のソースがあったとします。
// a.c
void a(void) {putchar('a');}
// b.c
extern void a(void);
void b(void) {a();}
main() {b();}
この場合、通常は a.c を動的ライブラリーにし、main()が含まれるb.cを本体とするのが通常ですが、
反対に、b.cを動的ライブラリーにし、a.cを本体としてコンパイルすることは可能でしょうか?
a.cを本体、b.cを動的ライブラリーとした場合のコンパイル結果 c.out があったとします。
c.outを実行した場合、まずb.c内のmain()が実行され、a.c内のa()が呼び出される、という動作を想定してます。
つまり動的リンクされるライブラリー内にmain()を置くということは可能ですか? linux,windowsの場合において。
0365デフォルトの名無しさん
2011/05/18(水) 21:31:22.740366デフォルトの名無しさん
2011/05/18(水) 21:52:23.87話の筋がよくわからないので、逆に質問。
>a.cを本体、b.cを動的ライブラリーとした場合のコンパイル結果 c.out があったとします。
c.outの話をしているってことは、コンパイルだけではなくリンクもしていると読めます。
しかし、a.cが本体(本体ってなんだ?と思うけど、実行ファイルと思っておきます。)
b.cが動的ライブラリってとは
a.c→a.out
bc→b.so
となるのではないかな?
いま動作確認できる環境がないけど、実行ファイルを作るにはctt0とmainが
必要になるので、言っているようなことはできないと思う。
もしかしたら、mainを含むライブラリは出来るかもしれないが、実行ファイルと
リンクできないのでは、実質使いものにならない。
しかしc.outがどこから出てきているのか不明なので、的はずれなことを言っているかも。
0367デフォルトの名無しさん
2011/05/18(水) 22:17:41.890368デフォルトの名無しさん
2011/05/18(水) 22:22:14.15現時点で必要と思えないなら、知る必要もない
0369デフォルトの名無しさん
2011/05/18(水) 22:27:08.02カスは失せな
0370デフォルトの名無しさん
2011/05/18(水) 22:29:34.650371デフォルトの名無しさん
2011/05/18(水) 22:30:39.46a.c->a.out
b.c->b.so
でいいです。
a.out は b.soを利用して動作します。
そうですか、やはり無理ですか…
元々、静的リンク前提で作られてるライブラリーなので、静的リンクでは当然mainも実行バイナリーに含まれるので問題無かったのですが、
.aではなく .so でやろうとしたら、上手く行かなくてこまってました。ありがとうござました。
a.c側にmain()を持ってくる大改造は避けたかったのですが、他に方法が無いようなのでがんばります。
0372デフォルトの名無しさん
2011/05/18(水) 22:30:49.18なるほどわかりました
0373デフォルトの名無しさん
2011/05/18(水) 22:31:30.26「ソースレベル・リンク・システム」おすすめ。
0374デフォルトの名無しさん
2011/05/18(水) 22:59:31.820375デフォルトの名無しさん
2011/05/18(水) 23:10:21.72そりゃライブラリの設計がおかしいよ。
ライブラリは再利用ができるモジュールであるはず。
それがmainを持っているっていうのは、ファイルとして分かれているだけで
ライブラリとしての再利用性は無いに等しいじゃん。
>a.c側にmain()を持ってくる大改造は避けたかったのですが、他に方法が無いようなのでがんばります。
メインを移すだけでいいならそんな大改造でも無いと思うが。
ファイルスコープ変数が大量にあって、mainで見えるように穴をあけるのが大変、というのなら、
ライブラリの意味ないから、一本の実行ファイルにしてしまえばいいじゃん。
0376デフォルトの名無しさん
2011/05/18(水) 23:36:10.41美しさ云々はさておき最小の改造で済ませるなら、
b.c の main を mymain に改名して、a.c に mymain を呼ぶ main を作る
じゃダメ?
0377デフォルトの名無しさん
2011/05/19(木) 00:09:28.98>>ライブラリの設計がおかしい
そんなこと言われてもこまります。
自分はlinuxに移植するだけで、もともとの設計者は別人ですので…
動的ライブラリーにしたいのは、ライセンスの絡みが理由です。
移植の際にgtk+2というライブラリーを使うので、これはLGPLというライセンスなので、
非GPLと静的リンクしてしまうと、非GPLとして発表することでライセンス違反になってしまうのですが、動的リンクなら違反にならないので。
分ける理由はそういう政治的な理由です…orz
>>376
過去のソースも無改造で同様に動作する。という縛りがあるので、
たとえば a.c は、まったく同じソースコードのままでなければならない(一字一句同じ) という縛りがあります。
なので、a.cに直接mainを追加で書いたりはできないんです。
#includeされるライブラリーヘッダー内に、なんとかa.cソース内にmain()を追加する仕掛けを書いて対応しようかと思ってます…orz
0378デフォルトの名無しさん
2011/05/19(木) 00:14:50.42なんか言ってること矛盾してない?後出し満載なので、これ以上は付き合わないけどね、おやすみ
> a.c側にmain()を持ってくる大改造は避けたかったのですが、他に方法が無いようなのでがんばります。
> たとえば a.c は、まったく同じソースコードのままでなければならない(一字一句同じ) という縛りがあります。
0379デフォルトの名無しさん
2011/05/19(木) 00:20:23.10b.cを動的リンクにしたいという動機はそのライセンスのせい?にしても筋が通らないように見えるけども。
エントリポイント変えてc.cにエントリポイント書いて、b.cのmain呼べば?
0380デフォルトの名無しさん
2011/05/19(木) 00:47:37.61それが簡単でいいかも。
b.c中のmain部分だけをc.cに移動してc.aとして静的ライブラリーにし、b.cはgtk+2を使う部分だけにしてb.soにし、
gcc a.c c.a -Lb.so で使えるようにすれば、mainのエントリーポイントがa.outに来るし。c.aは非GPLにできるし。
0381デフォルトの名無しさん
2011/05/19(木) 16:35:56.460382デフォルトの名無しさん
2011/05/19(木) 16:46:32.960383デフォルトの名無しさん
2011/05/19(木) 16:49:36.25違う文字で止めてほしかったから実装例が知りたいんです。
0384デフォルトの名無しさん
2011/05/19(木) 16:51:34.17fscanf 使うのが楽
0385デフォルトの名無しさん
2011/05/19(木) 17:02:00.20それを変えたいなら raw モードにするといいよ。
Win 環境なら getche() を使うといいかな。
0386デフォルトの名無しさん
2011/05/19(木) 18:16:59.14str="YAMDA";
としてmallocで新たに取得した領域にYAMADAが確保されるにはどうしたらいいですか?
正しstrcpyなど文字列コピー関数は使わない事。
char*ptr
ptr=mallocです。
0387デフォルトの名無しさん
2011/05/19(木) 18:22:43.57マジな質問なら、strcpy()を使えない理由を頼む。
宿題か何かなら、一文字ずつコピー。
パズルなら、構造体の代入を利用。
0388デフォルトの名無しさん
2011/05/19(木) 19:46:41.45二つの整数int a, int bをa≦bとなるように並び替える処理
A)#include<stdio.h>
int void(&a,&b)
int main(void){
scanf("%d %d",&a,&b);
printf( "%d %d\n", )
}
int void(&a,&b)
{
int tmp;
if (b < a){
tmp = a;
a = b;
b = tmp;
}
}
値が並び変わらないのですが なぜなのかおしえてくださいmm
0389デフォルトの名無しさん
2011/05/19(木) 19:50:54.270390デフォルトの名無しさん
2011/05/19(木) 19:55:24.07int a, b;
void ooikiku(int &a, int &b);
void ooikiku(int &a, int &b)
{
...
}
0391デフォルトの名無しさん
2011/05/19(木) 19:56:46.92ちゃんと関数呼び出してください
0392デフォルトの名無しさん
2011/05/19(木) 20:00:25.15call( 関数 );
関数を呼び出すcallを作れば良いよ
0393デフォルトの名無しさん
2011/05/19(木) 20:05:53.010394デフォルトの名無しさん
2011/05/19(木) 20:05:55.60&a が int にならないし。
こういうクソ仕様決めるようなアホが
int* a; なんて書き方して喜んでるんだろうな。
0395デフォルトの名無しさん
2011/05/19(木) 21:05:34.73環境依存だけど、strdupは
0396デフォルトの名無しさん
2011/05/19(木) 22:11:33.41C++の話はC++のスレで。
0397デフォルトの名無しさん
2011/05/19(木) 22:21:21.300398デフォルトの名無しさん
2011/05/20(金) 13:16:39.27これもやっぱりダメですか?
int * hoge_test(int *v)
{
if (*v == 0)
{
return NULL;
}
else
{
retun v;
}
}
int main()
{
int v=50;
int *p;
p = hoge_test(&v);
if ( p == NULL) printf("error\n");
}
0399デフォルトの名無しさん
2011/05/20(金) 13:21:41.820400デフォルトの名無しさん
2011/05/20(金) 13:22:12.24やってること自体は問題ない
だが
>ローカル変数へのポインタ
この意味を全く理解はできていないな
お前が返してるのはローカル変数の値だ
0401デフォルトの名無しさん
2011/05/20(金) 13:26:30.40納得しました。
返すのがポインタなのでちょっとびくびくしてました・・・
0402デフォルトの名無しさん
2011/05/20(金) 15:41:40.390403デフォルトの名無しさん
2011/05/20(金) 16:48:10.86どうしてなのか教えて下さい
text.txtの内容
保存形式は名前を付けて保存の所で「Unicode Big Endian」を指定
----ココカラ
testテスト
test通るtest
----ココマデ
void test(void)
{
int i = 0;
FILE *fr;
wint_t tch = 0;
_tfopen_s(&fr, _T("test.txt"), _T("r"));
fseek(fr, 2, SEEK_SET); //BOMスキップ
while((tch = _fgettc(fr)) != WEOF) {
i++;
printf("%d %d %c\n", i, tch, tch);
}
fclose(fr);
}
0404デフォルトの名無しさん
2011/05/20(金) 16:53:49.160405デフォルトの名無しさん
2011/05/20(金) 17:01:02.97wint_t → _TINT
WEOF → _TEOF
こうしても無理だろ
0406デフォルトの名無しさん
2011/05/20(金) 17:31:33.35最初から書きなおせよ。
0407デフォルトの名無しさん
2011/05/20(金) 17:53:14.64#include<stdio.h>
void main(void)
{
int i = 0;
char ch = 0;
FILE *fr;
fr = fopen("test.txt", "r");
fseek(fr, 2, SEEK_SET); //BOMスキップ
while((ch = fgetc(fr)) != EOF) {
i++;
printf("%d %d %c \n", i, ch, ch);
}
fclose(fr);
i++;
printf("%d %d %c\n", i, ch, ch);
}
0408デフォルトの名無しさん
2011/05/20(金) 17:56:43.41> char ch = 0;
> while((ch = fgetc(fr)) != EOF) {
0409デフォルトの名無しさん
2011/05/20(金) 18:03:29.97main を void 型にしないこと。
> char ch = 0;
無意味な初期化はしないこと。
> while((ch = fgetc(fr)) != EOF) {
fgetc の返り値を char 型で受けとらないこと。
0410デフォルトの名無しさん
2011/05/20(金) 19:15:07.61UnicodeとUTF-8は"r, ccs=UNICODE"と"r, ccs=UTF-8"でやってるんだろうか
0411デフォルトの名無しさん
2011/05/20(金) 19:17:29.46使用する配列はどう定義したらいいですか?
0412デフォルトの名無しさん
2011/05/20(金) 19:24:35.800413デフォルトの名無しさん
2011/05/20(金) 19:39:34.89通でEOF(エラーではなくファイル終了)が返るな
やっぱバイナリじゃないだろうか
0414デフォルトの名無しさん
2011/05/20(金) 20:25:30.45Windwsだよね?
fopenはUTF-8かUTF-16LEのBOMしか判定しないから
UTF-16BEはバイナリモードで開いて自力で処理するしかないよ
0415デフォルトの名無しさん
2011/05/20(金) 20:58:56.26if (1==a)
どう違うんですか?下のを使うように注意されたんですが?
さらに
if (!(a-1))
はどうなんですか?
0416デフォルトの名無しさん
2011/05/20(金) 21:01:11.10まぁ
tablenoteじゃなくて
tabel noteとしたいです。同じ行です。
どうしたらいいですか?
改行の場合は\nでしたよね。
0417デフォルトの名無しさん
2011/05/20(金) 21:04:58.69if( a = 1 ) って書き間違えたときに if( 1 = a ) ならエラーにしてくれるから癖にしておくといいよってことだろ
if( a == b ) とかの場合だと入れ替えても意味がないけど。
0418デフォルトの名無しさん
2011/05/20(金) 21:11:08.23これで getch() や kbhit() 的な関数って、どうやってプログラムすればできる? だれかソースよろ
ちなみにコンパイルは tcc hello.c で ./a.outが実行ファイルになる
0419デフォルトの名無しさん
2011/05/20(金) 21:14:17.26それ凄いよな
emacs立ちあがったとき感動したw
0420デフォルトの名無しさん
2011/05/20(金) 21:18:28.84\x20
0421デフォルトの名無しさん
2011/05/20(金) 21:19:13.77http://nico.ms/sm14500277
解説は13分過ぎ辺りから。
0422デフォルトの名無しさん
2011/05/20(金) 21:20:02.51>if (1==a)
悪しき習慣だ。「1がaに等しかったら」なんて普通の思考じゃない。
思考過程をなぞって「aが1に等しかったら」つまり、a == 1 とするべきだ。
これを強要されるような環境だと、形式主義に陥りがちだから他にも変な習慣があるに違いない。
>if (!(a-1))
判り難い上に定数前置のような微かなメリットもない。従って、スタイルとしては論外。
0423デフォルトの名無しさん
2011/05/20(金) 21:21:09.42何がしたいんだ? 文字列リテラル中に空白を置きたいだけならそのまま書けばいい。
0424デフォルトの名無しさん
2011/05/20(金) 21:23:22.02if( a = 1 ) とした(間違った)ときにワーニングが出るようにして、注意深く精査すべき
0425デフォルトの名無しさん
2011/05/20(金) 21:24:15.54まちがえて
==
ではなく
=
って書いちゃったときに、コンパイルエラーが出るから安全(?)って理由が主でしょ。
たとえば
if(a = 1)
ならコンパイル通るけど
if(1 = a)
ならエラー(定数への代入でエラー)になるから、いろいろ捗るってことだと思う。
0426デフォルトの名無しさん
2011/05/20(金) 21:25:26.710427デフォルトの名無しさん
2011/05/20(金) 21:28:07.050428デフォルトの名無しさん
2011/05/20(金) 21:28:44.48VC++かMinGW
MinGWのはどこまで互換性があるか知らんけど
0429デフォルトの名無しさん
2011/05/20(金) 21:30:04.230430デフォルトの名無しさん
2011/05/20(金) 21:41:20.73これがコンパイルできないようにするのがよりよい
0431デフォルトの名無しさん
2011/05/20(金) 21:42:56.620432403
2011/05/20(金) 21:50:25.79ファイルの先頭が
0xFFFEなら"r, ccs=UNICODE"
0xFEFFなら"r"
0xEFBBBFなら"r,ccs=UTF-8"
それ以外なら"r"
で開いて
i=0
ファイルの終わりまで { // {1
1バイト読む
TCHAR szBuff[i]に入れる
Unicode big endianなら { // {2
2バイトずつ前後入れ替え (Unicodeにする)
例 szBuff[i-1] = 0x00
szBuff[i] = 0x0Aから
szBuff[i-1] = 0x0A00にする
} //2}
改行が来たらTCHARをWideCharToMultiByte();して別テキストに"a"で書き込み(ANSIになる)
} //1}
こんな感じで処理していました
ccs=<Encode>が無いと「通」に限らずUnicodeで言う「0x1A」をANSIで言う制御文字「SUB」として認識されるため
って言うことでした
お騒がせしました
0433デフォルトの名無しさん
2011/05/20(金) 21:53:27.790434デフォルトの名無しさん
2011/05/20(金) 21:54:32.64俺バカなんでバカよけ仕込んどかないとだめなんよ
0435デフォルトの名無しさん
2011/05/20(金) 21:55:40.36お前を除くのが一番いいんじゃね
0436デフォルトの名無しさん
2011/05/20(金) 21:56:04.800437デフォルトの名無しさん
2011/05/20(金) 21:56:17.06いつも使ってるコンパイルスイッチ教えて
0438デフォルトの名無しさん
2011/05/20(金) 21:57:28.210439デフォルトの名無しさん
2011/05/20(金) 21:57:34.90俺と同じくらいバカなら Wall Werrorは最低限やっとくといいよ。なんど救われたかわからん。
0440デフォルトの名無しさん
2011/05/20(金) 21:57:59.54えてして痛みって時間経過で消えてしまうんだよな
そのたびに、新鮮な気持ちで間違えるw
0441デフォルトの名無しさん
2011/05/20(金) 22:00:46.39もしくはほんとにミスをしない人。
でも後者ならこんなとこでくだまいてないから……ね。
0443デフォルトの名無しさん
2011/05/20(金) 22:10:09.320444デフォルトの名無しさん
2011/05/20(金) 22:12:19.96つまり自称玄人はコンパイラの出す警告なんて無視するってことかなw
0445デフォルトの名無しさん
2011/05/20(金) 22:15:31.09これで出なきゃ諦めろw
0446デフォルトの名無しさん
2011/05/20(金) 22:15:42.70プロにとってコンパイルエラーはコンパイラのバグ
0447デフォルトの名無しさん
2011/05/20(金) 22:19:21.540448デフォルトの名無しさん
2011/05/20(金) 22:22:42.34なんで警告無視することになってんの?
>>442
gccは -Wparentheses で。(-Wallに含まれる)
VCもスイッチなしなら警告でない。
かといってWallつけるとstdio.hの中で警告が出る問題を抱えてる
0449デフォルトの名無しさん
2011/05/20(金) 22:24:05.53そうなんだ
そうなんだ
0450デフォルトの名無しさん
2011/05/20(金) 22:28:07.670451デフォルトの名無しさん
2011/05/20(金) 22:29:01.01#define EQ(A, B) ((A) == (B))
でも定義しろよw
0452デフォルトの名無しさん
2011/05/20(金) 22:29:09.900453デフォルトの名無しさん
2011/05/20(金) 22:29:22.810454デフォルトの名無しさん
2011/05/20(金) 22:29:55.350455デフォルトの名無しさん
2011/05/20(金) 22:31:10.270456デフォルトの名無しさん
2011/05/20(金) 22:34:11.90伝わりにくくてすまん。clだと警告が出る。
>>454
入門者こそ警告が沢山でる設定にすべきだと思わない?
0457デフォルトの名無しさん
2011/05/20(金) 22:38:50.70変数同士のときは==と=取り違えないとは思えない
0458デフォルトの名無しさん
2011/05/20(金) 22:39:35.97>入門者こそ警告が沢山でる設定にすべきだと思わない?
同意。出された警告の意味をちゃんと分かって欲しいよね
0459デフォルトの名無しさん
2011/05/20(金) 22:45:53.68・可能な限り誤差を抑えられるよう工夫して計算方法を変える
・double型をあきらめて他の方法を考える
0460デフォルトの名無しさん
2011/05/20(金) 23:14:11.34%eの後ろに付ける桁数調整の記号とかは何の役割なんですか?
0461デフォルトの名無しさん
2011/05/20(金) 23:16:33.28doubleが記憶している本物の値のうち何桁まで表示するかを指定する
0462デフォルトの名無しさん
2011/05/20(金) 23:18:38.43%eの後ろに付けれるものなんかあったっけ?
0463デフォルトの名無しさん
2011/05/20(金) 23:20:56.11(文字列化の際の)表示桁の調整してるだけ。
精度・誤差 ≒ 解析解との違い
0464デフォルトの名無しさん
2011/05/20(金) 23:22:41.59桁数調整記号つけないとどうなるんですか?
またつけるときの例を教えてください。
0465デフォルトの名無しさん
2011/05/20(金) 23:38:05.56違ってくるんですか?
0466デフォルトの名無しさん
2011/05/20(金) 23:42:08.680467デフォルトの名無しさん
2011/05/20(金) 23:47:44.03double型って何桁まで表示できるんですか?
0468デフォルトの名無しさん
2011/05/20(金) 23:53:04.560469デフォルトの名無しさん
2011/05/20(金) 23:53:43.34整数部が1で少数部の4桁目〜5桁目で食い違った系は経験したことがある
0470デフォルトの名無しさん
2011/05/20(金) 23:54:37.36e--
以下の部分が全然違う事があるんですが。
0471デフォルトの名無しさん
2011/05/20(金) 23:57:38.652進数で53ビットだから、10進で9007199254740992なので15~16桁が有効桁数かな
0472デフォルトの名無しさん
2011/05/21(土) 00:04:35.63小数点以下のことですか?
0473デフォルトの名無しさん
2011/05/21(土) 00:07:04.23「浮動」小数点の意味がわかってないのか?
0474デフォルトの名無しさん
2011/05/21(土) 00:10:51.00どういう意味ですか?
0475デフォルトの名無しさん
2011/05/21(土) 00:10:55.57素朴な疑問
double が IEEE754 基数2 として実装されてて、
保持されてるそれが 10進の値で循環小数になるようなのは
printf やそれに類する文字列化関数でいくらでも文字を並べることが可能なのだろうか?
0476デフォルトの名無しさん
2011/05/21(土) 00:11:20.530477デフォルトの名無しさん
2011/05/21(土) 00:19:56.47確か256バイト制限かなにかがあったんじゃなかったかな?
異常値が来ると怖いから、%fはそのままでは殆ど使わなくなったから用ないけど。
たとえば、
void func(double val)
{
char buf[100];
sprintf(buf, "%f", val);
}
なんて関数があったとして、func(1e100)なんてした日には。
0478デフォルトの名無しさん
2011/05/21(土) 00:29:43.15ある数字の適当なところに小数点をつけて表現するから浮動
有効桁数が8けただとすると、12345678は表現できるけど、123456789は表現できない
で、12345678の適当なところに小数点をつけて表現できるので
0.000012345678 も 1234.5678 も 1234567800000000.0も表現できる
けど、1234567800000000.0 に 1.0を足そうとしても、有効桁数の範囲で収まらないので、消える
0479デフォルトの名無しさん
2011/05/21(土) 00:34:56.622進数から10進数への変換は常に有限
循環小数にはならない
0480デフォルトの名無しさん
2011/05/21(土) 00:43:14.64ありゃ 俺の勘違いなのかな。
基数2での可数部の値の表現を確認してみるー
0481デフォルトの名無しさん
2011/05/21(土) 00:48:08.18ん?それ整数の時だけだろ
0482デフォルトの名無しさん
2011/05/21(土) 01:03:17.112^-1 = 0.5
2^-2 = 0.25
2^-2 = 0.125
2^-3 = 0.0625
2^-4 = 0.03125
2^-5 = 0.015625
2^-6 = 0.0078125
2で割るたびに桁が増えていくだけで無限にはならない
0483デフォルトの名無しさん
2011/05/21(土) 01:12:41.73思い出したのは0.1(10進)が2進では循環することだった
0484デフォルトの名無しさん
2011/05/21(土) 07:30:16.09一応、縦シューティングなんかはよく作るんだが
0485デフォルトの名無しさん
2011/05/21(土) 07:38:50.87ブートとかでアセンブラの知識がいるだろう
そのほかの部分でもレジスタ直接たたいたりする低級なところの知識が要る
Cの知識はプログラム書ければ問題ない
0486デフォルトの名無しさん
2011/05/21(土) 07:42:18.84こんなところで聞いてる時点でお前の実力じゃ無理。
0487デフォルトの名無しさん
2011/05/21(土) 07:56:31.16作り始めの時点でC言語知識無しの
ひげぽんが作れたからやる気の問題だろ
0488デフォルトの名無しさん
2011/05/21(土) 11:22:28.84この場合doubleかfloatどっちが有効ですか?
0489デフォルトの名無しさん
2011/05/21(土) 14:01:33.29long double でさえダメな可能性あり
0490デフォルトの名無しさん
2011/05/21(土) 14:28:32.30精度がいいほうがいいです。
long double とdoubleだと
long doubleを使うにこしたことないんですか?
0491デフォルトの名無しさん
2011/05/21(土) 14:41:48.55typedef int INT
define INT int
0492デフォルトの名無しさん
2011/05/21(土) 14:48:55.94行列のサイズを2または3を選択させ、その行列を表示しその行列式を計算するプログラムを作れって問題です。
どなたかお願いします。
0493デフォルトの名無しさん
2011/05/21(土) 15:24:12.94宿題スレへでも。
>>491
目的が違うから構文が違うのも無辺なるかな。
>>490
long doubleを使うべきならその通りだが、大抵の用途ではdoubleで充分かlong doubleでも不充分だろう。
用途をはっきりさせたまえ。
0494デフォルトの名無しさん
2011/05/21(土) 15:32:05.480495デフォルトの名無しさん
2011/05/21(土) 15:58:40.58単に学校の演習です。
精度が良ければいいにこしたことないけど、大規模な事をするわけでも
ありません。
0496デフォルトの名無しさん
2011/05/21(土) 16:41:06.330497デフォルトの名無しさん
2011/05/21(土) 16:45:04.860498デフォルトの名無しさん
2011/05/21(土) 16:48:51.240499デフォルトの名無しさん
2011/05/21(土) 16:52:43.13精度が良いと言っても、人によって受け止め方がまちまち。
「こういう事をしたいから、最低小数点以下何桁まで正確に計算したい」とか
「課題として、何桁の出力を求められてる」みたいに、
具体的に言わないと伝わらない。
0500デフォルトの名無しさん
2011/05/21(土) 16:53:31.54特に理由がなければ「通常は」 double
0501デフォルトの名無しさん
2011/05/21(土) 17:51:56.72i=0;
として
while(1){
略
break;
↑
〜略〜
↓
i++;
}
if(i==1)printf("t");
という関数があるのですが、break文によってwhileを抜けたのにも
関わらずtが出力されます。何故ですか?i++;に到達するまでにbreak;
を起こしているのに・・
0502デフォルトの名無しさん
2011/05/21(土) 17:55:52.41% cat foo.c
int main() {
int i = 0;
while(1) { break; i++; };
if(i == 1) puts("t");
else puts("f");
}
% gcc foo.c
% ./a.out
f
0503デフォルトの名無しさん
2011/05/21(土) 17:57:50.400504デフォルトの名無しさん
2011/05/21(土) 18:48:50.98自分の電卓では弧度法なんですよ。
0505デフォルトの名無しさん
2011/05/21(土) 18:56:01.710506デフォルトの名無しさん
2011/05/21(土) 19:46:10.00ちょっと掛け算するだけだろ。
0507デフォルトの名無しさん
2011/05/21(土) 20:04:09.780508デフォルトの名無しさん
2011/05/21(土) 20:14:32.090509デフォルトの名無しさん
2011/05/21(土) 20:25:00.163年連続で単位は落としたくないです。
昨日のdoublenの質問をしたものですが、座標上の値をdoubleで表現すると
1.23200e-16
みたいになってしまいます・・・
僕的には0,323みたいに
このeみたいなのがつかない表示がしたいです。
どうしたらいいですか?
もう頭がおかしくなりそうです。
0510デフォルトの名無しさん
2011/05/21(土) 20:28:05.44double x;
printf("%f\n", x);
あと、http://hibari.2ch.net/test/read.cgi/tech/1305867431/ というスレがある。
0511509
2011/05/21(土) 20:30:43.53fはfloat型じゃないのでしょうか?
eはdouble型でしょう?
助けて下さい・・
3年の時点で単位30個です・・・
ほとんど留年決定してますが。
プログラミングの授業が出来なくて、簡単なほかの授業のテスト勉強も
ままならず単位落としてしまってる状況です。
0512デフォルトの名無しさん
2011/05/21(土) 20:38:34.97printf に渡すとき float は自動的に double に格上げされるので float の変換指定子は無い
0513デフォルトの名無しさん
2011/05/21(土) 20:44:44.18具体的な問題を先入観抜きでアップせよ。
よけいなバイアスがかかっていてこちらには伝わってこない。
※ %e は、浮動小数点式の表示方法、%f は固定小数点式の表示方法を指定する
※ %e や %f の表示対象は浮動小数点数、つまり double か float
※ %f は double でも float でも OK。printf() は可変長引数だから、結局は double に変換される。
※ float と double の違いは、変数のサイズ。その結果が精度や表現可能な数の範囲にも反映される。
0515デフォルトの名無しさん
2011/05/21(土) 21:03:42.600516デフォルトの名無しさん
2011/05/21(土) 21:25:59.870517デフォルトの名無しさん
2011/05/21(土) 21:29:31.450518デフォルトの名無しさん
2011/05/21(土) 21:32:58.23計算ができてりゃ表示なんて簡単だろ
0519デフォルトの名無しさん
2011/05/21(土) 21:33:05.35積を文字列として入力してもらい、printf()などで表示。
0520デフォルトの名無しさん
2011/05/21(土) 21:41:49.89計算もしてください
0521デフォルトの名無しさん
2011/05/21(土) 21:47:49.220522513
2011/05/21(土) 22:04:50.24float は(環境にもよるが普通) 4バイトで実数を表現する。
double は 8バイトで実数を表現する。
おのずと、double のほうが表現できる範囲が広くかつきめ細かく表現できる。
そのかわり float のほうが、サイズが小さい分、限られたサイズのなかでは多くの実数を格納でき、(一般的には)演算が速い。
要は用途にあわせて一長一短になるといってよい。
演習レベルでは double にしておくのが無難である。 C の関数によっては float を double に変換して処理するものがある。
例:printf()
0523デフォルトの名無しさん
2011/05/21(土) 22:11:34.92http://hibari.2ch.net/test/read.cgi/tech/1301553333/668
20桁同士用に調整していますので、30桁の場合には、このままではオーバーフローします。
宿題スレに書式を整えて依頼していただければ、きちんと検証したコードをアップロードできるかもしれません。
0524509
2011/05/21(土) 22:56:23.18ありがとうございます。
多くの実数を格納できるという意味がよくわかりません。
どういうことですか?
0525デフォルトの名無しさん
2011/05/21(土) 23:04:55.22卒業まであと何年掛かるのか?
卒業してどういう仕事に付きたいのか?
今やっていることは仕事に直結させたいのか?
おそらく決定的に向いていないと思うので、
さっさと学校辞めて高卒資格の公務員にでもなった方がいいよ。
0526デフォルトの名無しさん
2011/05/21(土) 23:11:22.900527デフォルトの名無しさん
2011/05/21(土) 23:37:40.55じゃあもうアウトなんだなw
>>509は派遣労働者確定ですかwww
色々渡り歩いて仕事が辛くない&正社員登用している工場探した方がいいな。
大手だと残業夜勤で中小の大卒よりもいい思いできるからな。
一生フリーターより断然いい。
0528509
2011/05/21(土) 23:50:47.23黙ってろ。どうせアドバイスするつもりもねーんだろ。
>>522
とりあえずdouble使ってみます。
floatだと小数点表示がわかりやすい気がするのですが・・
0529509
2011/05/21(土) 23:55:11.34ただ煽らないでください。そういったら煽るんでしょうけど。
0530デフォルトの名無しさん
2011/05/22(日) 00:00:06.82単に、同一サイズの領域の中に変数を詰め込む場合、float の方が double の倍詰め込むことができる、位の意味です。
実用的には、float の方が演算が速い、というのが大きいようです。(cuda とか。まだやったことないけどいずれは‥‥)
0531522,530 ◆QZaw55cn4c
2011/05/22(日) 00:01:36.48煽りは 2ch の華ですからねえ。つhttp://hibari.2ch.net/test/read.cgi/tech/1295273862/
0532デフォルトの名無しさん
2011/05/22(日) 00:18:45.49相変わらず見当違いのレス乙。
floatが速いなんて、それなりの知識がないと応用できないようなこと初心者に言うな。
自分自身だって判ってないじゃないか。
それと、printf()がfloatをdoubleに変換するわけじゃない。
つーか、いい加減既にないスレのリンクなんか書いてないで布団被って寝ろ。
0533デフォルトの名無しさん
2011/05/22(日) 00:35:07.30これからはブラジルで農業がアツい。
0534デフォルトの名無しさん
2011/05/22(日) 00:40:05.89>floatが速いなんて、それなりの知識がないと応用できないようなこと初心者に言うな。
それは >>530 で私自身も認めていることであるし、あらためて言われてもねえ。
>それと、printf()がfloatをdoubleに変換するわけじゃない。
それも >>513 できちんと書いておきました。なんなら IEC/ISO 9899:1999 の該当場所でも引用しますか?
最終的に >>522 で 私自身の意見として double を勧めていますが、それでもご不満?
0535デフォルトの名無しさん
2011/05/22(日) 00:44:15.560536デフォルトの名無しさん
2011/05/22(日) 01:53:02.800537デフォルトの名無しさん
2011/05/22(日) 01:57:25.80ほう、では >>529 に対してさぞかしすばらしい、いや妥当な回答をかけるというわけですね。期待しています。
0538デフォルトの名無しさん
2011/05/22(日) 02:17:35.290539デフォルトの名無しさん
2011/05/22(日) 02:20:58.30>実用的には、float の方が演算が速い
そもそも、それ自体が一般的ではない。
>可変長引数だから、結局は double に変換される
だから、それはprintf()が行なうのではない。
やっぱり判ってないじゃないか。
0540デフォルトの名無しさん
2011/05/22(日) 02:29:19.430541デフォルトの名無しさん
2011/05/22(日) 02:43:11.79何キリキリしてんだよ。
0542デフォルトの名無しさん
2011/05/22(日) 03:09:26.580543デフォルトの名無しさん
2011/05/22(日) 03:35:01.67これ、
1 == 0
と書いたって別に間違いじゃないんだぞ?
意味解ってやってんのか?
0544デフォルトの名無しさん
2011/05/22(日) 03:45:33.62屁理屈はどうでもいい
0545デフォルトの名無しさん
2011/05/22(日) 04:35:09.530546デフォルトの名無しさん
2011/05/22(日) 09:35:26.630547デフォルトの名無しさん
2011/05/22(日) 09:44:49.800548デフォルトの名無しさん
2011/05/22(日) 11:23:23.93◆QZaw55cn4c == キチガイ は常に真
0549デフォルトの名無しさん
2011/05/22(日) 11:55:11.63http://hibari.2ch.net/test/read.cgi/tech/1305216054/1
0550デフォルトの名無しさん
2011/05/22(日) 12:42:17.81あるプログラムファイル上でそのヘッダをインクルードする場合
main関数内でint tokubetu;と宣言するのはだめなのでしょうか?
#include "b.h"
int tokubetu;
main()
は、
int tokubetu;
int tokubetu;
main()
と、二回定義しているので、以下のようにする。
[b.h]は、
extern int tokubetu;
[main.c]は、
#include "b.h"
main()
[b.c]は、
#include "b.h"
int tokubetu;
0552デフォルトの名無しさん
2011/05/22(日) 12:51:35.00int a;
int main(){
int a;
{
int a;
{int a;}
}
return a;
}
いくつでも書ける。
0553デフォルトの名無しさん
2011/05/22(日) 12:53:24.58読解力ねえなw
0554デフォルトの名無しさん
2011/05/22(日) 12:58:54.84外部変数と呼ばれるんですか?呼ばれないのでしょうか?
0556デフォルトの名無しさん
2011/05/22(日) 13:19:56.93英語でOK!
0558デフォルトの名無しさん
2011/05/22(日) 13:47:42.920559デフォルトの名無しさん
2011/05/22(日) 13:50:51.97それだけはやってはならない
0560デフォルトの名無しさん
2011/05/22(日) 13:53:53.48何故でしょうか?
while(1)から抜ける条件としてはbreak;以外にありますか?
0561デフォルトの名無しさん
2011/05/22(日) 13:56:19.58return
0562デフォルトの名無しさん
2011/05/22(日) 13:56:31.440563デフォルトの名無しさん
2011/05/22(日) 13:58:20.900564デフォルトの名無しさん
2011/05/22(日) 13:59:40.750565デフォルトの名無しさん
2011/05/22(日) 14:01:32.87何故やったらいけないのですか?
while(1)
{
break;
}
だめですか?
0566デフォルトの名無しさん
2011/05/22(日) 14:03:34.54なんで質問しようと思ったの?
0567デフォルトの名無しさん
2011/05/22(日) 14:13:06.15無限ループで戻らない関数をテストするのに便利な
テストツールはありますか?
0568デフォルトの名無しさん
2011/05/22(日) 14:14:42.46while(1)
{
if~~
break;
}
みたいな形見た事ないからです。
0569デフォルトの名無しさん
2011/05/22(日) 14:16:21.26いくらでも見たことあるなぁ。
0570デフォルトの名無しさん
2011/05/22(日) 14:20:38.73無限ループは抜けないのが前提なんだから抜けるのはおかしい。
抜けるなら while(1) を使うのはおかしい。
0571デフォルトの名無しさん
2011/05/22(日) 14:22:31.70何言ってるの?
0573デフォルトの名無しさん
2011/05/22(日) 14:35:21.48それってテストの自動化面倒くさくないですか?
0574デフォルトの名無しさん
2011/05/22(日) 14:42:19.03int main(void)
{
unsigned char data[1];
unsigned char buffer[64];
unsigned char dummy[20];
while (fgets(buffer, 64, stdin) != NULL)
{
if (buffer[0] == '/') continue;
sscanf(buffer, "%10s,%d", dummy, &data[0]);
}
//dummyは読み捨て、dataで色々する
return 0;
}
//test.txt
//こめんと
あああああ,10
いいいいい,20
ううううう,30
mingw gcc3.45でコンパイル後、
test.exe < test.txt
と実行すると不正終了するんだが、何でかな?bcc5.5でコンパイルしたらちゃんと動いたんだが。
sscanf()で暗黙の型変換した値をそのまま代入しようとしてる?gccのバグ?
0575デフォルトの名無しさん
2011/05/22(日) 14:43:59.79おめーの頭がバグってる
0576デフォルトの名無しさん
2011/05/22(日) 15:10:34.160577デフォルトの名無しさん
2011/05/22(日) 15:17:16.77別に宿題じゃないよ。要素数1の配列でいろいろ試してるだけ。
バグかどうか切り分けたいからあんたの環境で実行してみてよ。
0578デフォルトの名無しさん
2011/05/22(日) 15:19:57.470579デフォルトの名無しさん
2011/05/22(日) 15:24:03.890580デフォルトの名無しさん
2011/05/22(日) 15:26:19.410581デフォルトの名無しさん
2011/05/22(日) 15:31:41.59for(;;)を使えってことだよ
0582デフォルトの名無しさん
2011/05/22(日) 15:34:49.54それも同罪だボケ
0583デフォルトの名無しさん
2011/05/22(日) 15:41:23.57loop:
goto loop;
0584デフォルトの名無しさん
2011/05/22(日) 15:45:32.24実行結果が思うようにいきません
なんかおかしいとこありますか
0585デフォルトの名無しさん
2011/05/22(日) 15:47:09.870586デフォルトの名無しさん
2011/05/22(日) 15:47:48.140587デフォルトの名無しさん
2011/05/22(日) 17:03:11.41スピンロックってそういう構造だと思うけど
0588デフォルトの名無しさん
2011/05/22(日) 17:12:17.72コンパイラがどう解釈してるのかは知らないけど、
左辺に定数置くと条件判定が速くなるとか誰かが言ってた。詳しい人教えてくれ。
0589デフォルトの名無しさん
2011/05/22(日) 17:21:08.590590デフォルトの名無しさん
2011/05/22(日) 18:37:49.19それは古豪がよく使っており賛否両論。
if (a == 1)
を間違って
if (a = 1)
と書いてしまっても昔のコンパイラは警告はださなかった。
こんな間違いをするか!と思うだろうが1万ステップに1回くらいはやらかしても不思議はないし、そしてなによりも
この手のバグは見つけにくい。
if (1 == a)
と書くように習慣づけておれば、間違って
if (1 = a)
と書いたとして、当時のコンパイラも左辺値云々のエラーを出してくれたらしい。
コンパイラの出すエラーや警告と相談して好きにしていいと思う。
>>588
さすがにそれはないと思う。
0591デフォルトの名無しさん
2011/05/22(日) 19:32:00.870592デフォルトの名無しさん
2011/05/22(日) 20:17:37.04ミスを少なくするなら前者だとは思うんだけど。
うちの仕様書でも明確に決まってないし。
0593デフォルトの名無しさん
2011/05/22(日) 20:18:59.560594デフォルトの名無しさん
2011/05/22(日) 20:23:29.35#include <stdio.h>
int main(void)
{
char str[32];
scanf("%32s",str);
printf("%s\n",str);
return 0;
}
これで32字以上入力したらEOSを入れる場所が無い気がする
・EOSが入らない
・配列の最終要素のさらに次のメモリ領域を破壊して無理矢理EOSが追加される
・俺の勘違い
どれ?
0595デフォルトの名無しさん
2011/05/22(日) 20:24:35.700596デフォルトの名無しさん
2011/05/22(日) 20:28:03.78トン
ミス報告しとく
0597デフォルトの名無しさん
2011/05/22(日) 20:28:37.750598デフォルトの名無しさん
2011/05/22(日) 20:38:53.01sscanf(buf, "%d %d", &x, &y);
改行をバッファに残さないためには、
これがスタンダードなのかい?
0599デフォルトの名無しさん
2011/05/22(日) 20:46:23.44決められるわけないでしょ
両側が変数になっただけで破綻する論理だし
0600デフォルトの名無しさん
2011/05/22(日) 20:48:44.13って言われるよ。
0601デフォルトの名無しさん
2011/05/22(日) 20:58:15.03バグの原因が等号ひとつのせいとわかっておれば、の話ですが。
症状があって有象無象の原因が考えられる最中に、実際そんなことできます?
>>593
そういいきってしまえば、それでおしまい。
0602デフォルトの名無しさん
2011/05/22(日) 21:01:57.12いまのコンパイラは if / while (int a = func()) {
で警告を出してくれるし、可読性を優先させてもいいんじゃないですか?
0603デフォルトの名無しさん
2011/05/22(日) 21:04:59.23稼働している場合は、アプローチも変わると思うな。
現象や症状から、どこかを特定しながらやるだろうけど。
エディタの検索の話は、製造段階でのセルフチェックだと思う。
これは一度バグ作って痛い思いをすれば、黙ってでもする(ヨネ?)
0604デフォルトの名無しさん
2011/05/22(日) 21:17:22.89Cの流行り始めに口先男の常套句を今時見るとは思わんかった
0605デフォルトの名無しさん
2011/05/22(日) 21:18:46.77見てすぐにわかる
0606デフォルトの名無しさん
2011/05/22(日) 21:21:35.25本当に=を使いたいときには多少邪魔だが、見逃すよりはいい
0607デフォルトの名無しさん
2011/05/22(日) 21:34:27.40入門書読んでソースを実行して確認してるところなんです
環境 XPPro コンパイラ BCC
内容はcsvを読んで二次元配列に格納し、それを画面で確認するというものです。
ソース
http://codepad.org/1MlNzXPB
(データファイルの中身は最下行のコメント部分です)
でコンパイル後実行しても表示されないのでprintf入れてみると
dat[0][0] : 85 dat[0][1] : 60 dat[0][2] : 70 dat[0][3] : 82
dat[0][0] : 62 dat[0][1] : 78 dat[0][2] : 95 dat[0][3] : 80
dat[0][0] : 70 dat[0][1] : 95 dat[0][2] : 100 dat[0][3] : 63
dat[0][0] : 75 dat[0][1] : 80 dat[0][2] : 69 dat[0][3] : 92
dat[0][0] : 100 dat[0][1] : 72 dat[0][2] : 90 dat[0][3] : 90
nがインクリメントされてないのは何故なんでしょう?
0608デフォルトの名無しさん
2011/05/22(日) 21:37:18.750609デフォルトの名無しさん
2011/05/22(日) 21:37:22.11おまえ alias で sl とか作ってない?
0610デフォルトの名無しさん
2011/05/22(日) 21:41:54.08nを表示しろ
0611デフォルトの名無しさん
2011/05/22(日) 21:44:47.91×printf(" dat[%d][%d] : %3d",i,j,dat[n][j]);
○printf(" dat[%d][%d] : %3d",n,j,dat[n][j]);
あと最後の for (i = ....) の終了条件が変。 i < n とかでは?
0612デフォルトの名無しさん
2011/05/22(日) 22:05:22.240613607
2011/05/22(日) 22:24:54.91見落としていました。
dat[0][0] : 0 dat[0][1] : 60 dat[0][2] : 70 dat[0][3] : 82
dat[1][0] : 0 dat[1][1] : 78 dat[1][2] : 95 dat[1][3] : 80
dat[2][0] : 0 dat[2][1] : 95 dat[2][2] : 100 dat[2][3] : 63
dat[3][0] : 0 dat[3][1] : 80 dat[3][2] : 69 dat[3][3] : 92
dat[4][0] : 0 dat[4][1] : 72 dat[4][2] : 90 dat[4][3] : 90
85 60 70 82
62 78 95 80
70 95 100 63
75 80 69 92
100 72 90 90
dat[n][0]の表示が?ですが格納と表示そのものは出来たみたいです。
dat[n][0]の表示についてはまた勉強してみます。
ありがとうございました。
0614デフォルトの名無しさん
2011/05/22(日) 22:37:23.25警告レベルを最大にして警告が出ないように書くって基本的なことをする
だけで防げるミスを 1 == a とか変な書き方するのって技巧に走りすぎてる。
0615デフォルトの名無しさん
2011/05/22(日) 23:01:33.78チェックしないで、コンパイルできないようにする
0616デフォルトの名無しさん
2011/05/22(日) 23:12:06.190617デフォルトの名無しさん
2011/05/22(日) 23:27:20.710618デフォルトの名無しさん
2011/05/22(日) 23:35:10.02そうでなきゃ正直やるか微妙
0619デフォルトの名無しさん
2011/05/22(日) 23:41:34.71メンバーは全部オレで、レビュワーもオレだけど。
0620デフォルトの名無しさん
2011/05/22(日) 23:42:51.48いっつも俺も後ろで見てるよ
0621デフォルトの名無しさん
2011/05/23(月) 01:32:17.81可読性もよくないし、ご意見には全く同意です。
ただし私は知らないけれど、昔のコンパイラは警告に関しては酷かったみたいですよ。
プロトタイプ宣言もないし、引数チェックもない。
int f(a, b)
int a, b
{
return (0);
lint なんていうものがあるくらいだから。
0622デフォルトの名無しさん
2011/05/23(月) 03:11:06.08lintが有効な時代だったころはlintかけて警告全部潰すのが当たり前だったね。
んで、昔のコードをメンテしてたら1 == aなんて懐かしい記述がでてきたという話じゃなくて、
今の時代で、1 == aと書くかどうかなんでしょ。昔話をしたいわけじゃない。
今の時代に、そのような昔のコンパイラを使うことは論外だと思わない?QZさん。
0623デフォルトの名無しさん
2011/05/23(月) 03:13:19.49意図してるかどうかはわからんが、少なくとも最初のアップロードするコードに関してはそうなってる場合が多い。
修正しだすとその辺がぐだぐだになることも多い。
0624デフォルトの名無しさん
2011/05/23(月) 03:20:29.23それにしてはC99でしかコンパイル出来ないソースを上げたりポカをやるけどな
抜けているとしか言いようがない
0625デフォルトの名無しさん
2011/05/23(月) 13:01:54.880626デフォルトの名無しさん
2011/05/23(月) 14:48:01.08俺らは正直ここの連中を見下してますよ
0627デフォルトの名無しさん
2011/05/23(月) 15:10:26.520628デフォルトの名無しさん
2011/05/23(月) 15:26:20.010629デフォルトの名無しさん
2011/05/23(月) 15:43:34.75教えて
0630デフォルトの名無しさん
2011/05/23(月) 18:01:05.67便利だぞ! 関数でのタイムアウトエラーからの脱出なんか... breakで出れるんでスッキリする gotoは使いたくないからのう w
マクロサンドウィッチ? ああ あれは定番なんで...
0631デフォルトの名無しさん
2011/05/23(月) 18:12:34.98typedef struct _CINHERIT{
COBJ obj;
CANCESTOR ancestor;
.
.
} _CINHERIT;
なんてOOPホリモーフィズムの定番構図なんだが objやancestorの先頭からの相対アドレスが問題になる処理系ってある?
継承したクラスでobjをアクセスしようとしたら吹っ飛ぶとか.... もちろんobjインスタンスは生成されているとして...
あちきは今のところ無いんだが...
0632デフォルトの名無しさん
2011/05/23(月) 18:14:52.18どう見ても入門向けじゃないのでスレ違い。
0633デフォルトの名無しさん
2011/05/23(月) 18:17:17.95ん? いけね 入門編だったか 失礼!
0634デフォルトの名無しさん
2011/05/23(月) 18:41:49.78言語仕様についていえば保証されてる
0635デフォルトの名無しさん
2011/05/23(月) 18:43:56.06上級者は大変なんだなぁ
0636デフォルトの名無しさん
2011/05/23(月) 18:47:54.45↑
この文字列を読みたいのですが何で変換したらよいのでしょうか?
0637デフォルトの名無しさん
2011/05/23(月) 18:50:02.70脱出する手段としては綺麗かもだけど、結局呼び出し元とかに通達しない? <タイムアウトエラー
そうなると エラーコード積んで return でも ということに…
呼び出し前の事前処理・呼び出し後の後始末で
きちんと挟まれてないとまずいケースもあるから 一概に即 return で良いじゃんとは言わないヨ
0638デフォルトの名無しさん
2011/05/23(月) 19:11:31.59おっ 今日は休みなんで... w しかし 暇だなぁ 仕事も薄くなってきた orz 仕事くれ〜!
説明が足らんかった ワルッ のし
関数内でタイムアウトを処理し 戻り値で処理する場合だな これのメリットは...
例えばZigBeeなんかでコマンドのやり取りをする場合に
コマンド関数内でタイムアウトをモニターする現場的な関数の作り方は多い...
エラーはDelphiIO並みにIOResultとして処理する方式として
戻り値にエラーを返すスタイルではdo {} while(0)はスッキリする
俺の場合 ほとんどARMやらAVR32やらマイコンベースなんでちょっとわかりずらいかもな...
0639デフォルトの名無しさん
2011/05/23(月) 19:25:39.93ファイルサイズを制限、または行数を制限したいと考えています。
具体的には、超過が確認された場合、古い行(先頭から)を削除していこうというものです。
しかし、ファイルサイズの取得は簡単にできるのですが、超過が確認された際の処理が思い浮かびません。
_chsize()で切り詰めは可能ですが、これでは新しい行が捨てられてしまいます。
新規ファイルに、必要な行のみ書き出すことも考えたのですが、不要行の判定の仕方がこれまた思い浮かびません。
どなたかご教授お願いします。
0640デフォルトの名無しさん
2011/05/23(月) 19:33:52.21複数のファイルに分割してみたらどうかな?
それぞれ分割値の最大を超えたら、次のファイルに書き出すようにして、
合計値が所定の値を超えたら、古いファイルから順に削除、とか?
0641デフォルトの名無しさん
2011/05/23(月) 20:19:01.08古くて新しい問題だな。
一行のサイズを固定にできてリングバッファ状になっていいなら、一定行数に達した後は既存行を上書きする形でできるけどね。
要は、要件定義をしっかり確認するのが先だろうな。
0642デフォルトの名無しさん
2011/05/23(月) 21:38:53.38でも、それをやると
(void)printf("foo");
とかやらないといけなかったんではなかったでしょうか、手元のキーゥイ本だとたしか。
まあ、全面的に同意します。
0643デフォルトの名無しさん
2011/05/23(月) 21:46:41.52まだ目が醒めてない間抜けが後を絶たない
0644デフォルトの名無しさん
2011/05/23(月) 23:07:02.810645デフォルトの名無しさん
2011/05/23(月) 23:08:03.27まだこういうこと言うやつがいるの?
びっくりだわ・・・
おまえプログラマー辞めろ。ほんと。
0646デフォルトの名無しさん
2011/05/23(月) 23:41:11.08俺はビット演算とかよく分からないので教えてください偉い人
int main (int argc, char *argv[]) {
int num = 2011;
char buf[10];
int x = num, pt;
while (x /= 10) pt++;
buf[pt+1] = '\0';
do
buf[pt--] = num%10 + '0';
while(num /= 10);
printf("%s\n", buf);
return 0;
}
0647デフォルトの名無しさん
2011/05/23(月) 23:46:26.46癖というか、多分、ソースコードとバイナリとができるだけ対応しているのがいい、というブレーキが微妙に働いているのかもしれません。
実際には、 symdeb / gdb を使うまでに追い込まれたことは数えるほどしかないのですが。
それとも頻繁に使って慣れておいたほうがいいものなのでしょうか?お聞かせいただけるとうれしいです。
0648デフォルトの名無しさん
2011/05/23(月) 23:48:05.27sprintf()
0649デフォルトの名無しさん
2011/05/23(月) 23:50:55.98?
0650デフォルトの名無しさん
2011/05/23(月) 23:51:42.290651デフォルトの名無しさん
2011/05/23(月) 23:54:54.150652デフォルトの名無しさん
2011/05/23(月) 23:58:19.020653648
2011/05/23(月) 23:58:36.68まじめに答えると、
そもそも割り算という演算操作一回で、商と余りとの両方が手に入るはずなのに、
% や / だと、その片一方しか得られないのがもったいない、という感じがします。その辺からアプローチすると、どうなるか‥‥‥。
0654デフォルトの名無しさん
2011/05/24(火) 00:03:28.89Cだと浮動小数点でその手の標準関数があるだけじゃないかな
0655デフォルトの名無しさん
2011/05/24(火) 00:35:18.660656デフォルトの名無しさん
2011/05/24(火) 00:41:42.71一度最適化コンパイルしたアセンブリを読んでみるといいよ
0657デフォルトの名無しさん
2011/05/24(火) 00:43:37.28>>651 じゃないけど、/10 をビット演算に直す最適化コンパイラがあるの?!
それ何てコンパイラ?
0658デフォルトの名無しさん
2011/05/24(火) 00:48:12.53a/10はどうやんだ?
0659デフォルトの名無しさん
2011/05/24(火) 00:49:59.630660デフォルトの名無しさん
2011/05/24(火) 00:51:12.86#
0661デフォルトの名無しさん
2011/05/24(火) 01:15:24.27除算の剰余と商の両方を演算に利用しているなら、一回の除算で済ませる最適化も普通に行なわれる。
だから、下手にあれこれ考えずにコンパイラに任せるのが一番。
0662623 ◆XEE2zLj0dE
2011/05/24(火) 01:51:19.81わかってたと思うけどトリつけた。
gdbに慣れたほうがいいと思うけど、底辺マらしくprintデバッグですませてる。
gdb使ってもスタックトレース見るのに使うぐらい。
なもんで参考にならないと思うよ。ソースコードとバイナリの対応とかも全然考えてない。
×複雑なコードでもデバッガを使えば追えるよ
○複雑なコードはとっととリファクタリングしちゃえばいいよ
という方針。賛否あると思うけども。
0663デフォルトの名無しさん
2011/05/24(火) 06:40:55.54煽ってるつもりなのか知らんけど
>>661の通りで、GCCでも最適化される
0664デフォルトの名無しさん
2011/05/24(火) 07:54:46.620665657
2011/05/24(火) 08:27:17.66んー、最適化されるかどうかじゃなくてビット演算に直されるかどうかだから、>>661 は話が微妙に違うよね
GCC は IMUL してから SAR してるんだけど、これをビット演算に直したと言って良いのかな?
0666デフォルトの名無しさん
2011/05/24(火) 08:30:31.70いや、逆に定数除算をどのように乗算に置き換えるのか検討もつかない。
よろしければポインタをば。
乗算をコンボリューションとみなしてdft/idft する話くらいしか‥‥‥。
0667デフォルトの名無しさん
2011/05/24(火) 08:31:13.92それに、そもそもビット演算にすれば速くなるというわけでもないから>650は頓珍漢。
0668デフォルトの名無しさん
2011/05/24(火) 08:36:38.57魔じゃない系はprintfデバッグすら使いこなせません。
0669デフォルトの名無しさん
2011/05/24(火) 09:11:23.240670デフォルトの名無しさん
2011/05/24(火) 09:23:28.52マジで知らない?
基本的な考え方は、逆数を掛けるだけ。
面倒だから、16ビット整数を3で割る場合の例を。
numerator / 3
= numerator * (1 / 3)
= numerator * (65536 / 3) // 16ビット整数を仮定しているので65536を掛けても結果は変わらない
= numerator * 21846 / 65536 // 商を繰り上げるのは、65536で割って切り捨てるために必要になるため
0671デフォルトの名無しさん
2011/05/24(火) 09:27:40.06だから、今時のCPUはそんな最適化の必要がない。
実際、x86ならmov eax, [eax + eax * 4]
add eax, eax
のように計算できてしまう。
最早、ビットシフトの出番は殆ど残されていない。
0672デフォルトの名無しさん
2011/05/24(火) 09:36:06.37これだな。
ttp://d.hatena.ne.jp/kikx/20070504
なんだ、この板のx86計測スレが元ネタじゃないか。
0673デフォルトの名無しさん
2011/05/24(火) 09:50:22.46こいつ馬鹿なの?
0674デフォルトの名無しさん
2011/05/24(火) 09:53:08.580675デフォルトの名無しさん
2011/05/24(火) 09:54:43.11元ネタはコンパイラの最適化だよ
0676デフォルトの名無しさん
2011/05/24(火) 10:04:15.780678デフォルトの名無しさん
2011/05/24(火) 10:45:23.800679デフォルトの名無しさん
2011/05/24(火) 11:15:45.480680デフォルトの名無しさん
2011/05/24(火) 12:35:56.99たった1行だけで済むやり取りなのに、何故無駄に張り合うバカが後を絶たないのか?
知らなかったふりして自分の中で取捨選択するのが一番賢いのに。
0681デフォルトの名無しさん
2011/05/24(火) 12:42:01.19うむ
0682デフォルトの名無しさん
2011/05/24(火) 13:18:33.780683デフォルトの名無しさん
2011/05/24(火) 13:38:02.84アスペ乙
0684デフォルトの名無しさん
2011/05/24(火) 14:36:59.720685デフォルトの名無しさん
2011/05/24(火) 14:54:18.480686デフォルトの名無しさん
2011/05/24(火) 15:20:12.51砂時計みたいに、三角形が二つくっついてる図形作りたいんだけど
どうすればいいですか??(cygwin)
0687デフォルトの名無しさん
2011/05/24(火) 15:29:32.000688デフォルトの名無しさん
2011/05/24(火) 15:33:56.130689デフォルトの名無しさん
2011/05/24(火) 15:57:01.55あれはじめてみるとインパクトあるよな
どんな基地外機能だと思ったもんだ
0690デフォルトの名無しさん
2011/05/24(火) 16:15:07.29OCR-Bでかかれている数字のチェックディジット(CDは11, 41 )の
計算方法わかるかい。
110123467890200000010000223567011600000 --> CDは11
41000123456789002090153880000000000000000000 --> CDは41
0691デフォルトの名無しさん
2011/05/24(火) 16:55:48.61先頭1バイト?
0692デフォルトの名無しさん
2011/05/24(火) 17:31:05.74110123467890200000010000223567011600000のチェックディジットは11
データ部は11を除いた
012346789020000001000022356701160000です
41000123456789002090153880000000000000000000のチェックディジットは41
データ部は41を除いた
000123456789002090153880000000000000000000です
0693デフォルトの名無しさん
2011/05/24(火) 18:03:33.16strchr() の第2引数はなぜ int 型なのでしょうか(2/2) | OKWave
http://okwave.jp/qa/q4151525_2.html
回答No.4にて、
>実引数の型と仮引数の型が矛盾する場合の動作は未定義です
と書いてありますので、char型の実引数をint型の仮引数に渡す場合、厳密には以下のようにキャストが必要ということでしょうか?
char *s = "abcd";
char c = s[1];
strchr(s, (int)c);
同じ理由で、sqrt関数に渡すときもキャストが必要という認識でOKでしょうか?
int n = 10;
sqrt( (dobule)n );
0694デフォルトの名無しさん
2011/05/24(火) 18:09:05.040695デフォルトの名無しさん
2011/05/24(火) 18:54:20.84***プロトタイプ宣言されている***関数を呼び出す限り、キャストは必要ない。暗黙の型変換(あるいはプロモーション)に頼ってよい。
むしろ、情報の一部が失われる暗黙のキャストに対しては、最近のコンパイラは警告を出してくれるのにもかかわらず、
明示的にキャストすることによって、コンパイラの警告機能がキャンセルされてしまう弊害がでる。
繰り返す。キャストはしなくてもいい。問題があればコンパイラが警告する。
ただし、可変長引数のキャストは必要な場合がある。unix なら exec*() の (char *)NULL あたりとか。
0697デフォルトの名無しさん
2011/05/24(火) 20:05:40.50ARMもその今時のCPUの仲間に入れてやってくれよ
Windows8のターゲットにもなったことだしさ
mov r3, r0, asl #3
mov r0, r0, asl #1
add r0, r0, r3
0698デフォルトの名無しさん
2011/05/24(火) 21:16:07.17ビットシフト単体のニモニックじゃないんだから、内部がどうあれx86のleaと同じことじゃん。
0699デフォルトの名無しさん
2011/05/24(火) 21:19:05.30>むしろ、情報の一部が失われる暗黙のキャストに対しては、
「暗黙のキャスト」とは?
>ただし、可変長引数のキャストは必要な場合がある。unix なら exec*() の (char *)NULL あたりとか。
標準関数で問題が出るケースはないと思ってよろし?
0700uy
2011/05/24(火) 22:12:46.71は?
キャストしろよ
何言ってんだこいつ
暗黙のキャストに任せるって何いってんだこいつwwwwww
C言語だぞ
スクリプト言語じゃねーんだぞ
C++すら触ったことなさそうだな
0701デフォルトの名無しさん
2011/05/24(火) 22:12:50.770702デフォルトの名無しさん
2011/05/24(火) 22:20:01.760703デフォルトの名無しさん
2011/05/24(火) 22:22:24.81ttp://shyouhei.tumblr.com/post/5545216280/c
0704デフォルトの名無しさん
2011/05/24(火) 22:23:21.07ファンが多いからじゃね?
0705デフォルトの名無しさん
2011/05/24(火) 22:29:18.930706デフォルトの名無しさん
2011/05/24(火) 22:34:37.920707デフォルトの名無しさん
2011/05/24(火) 23:20:16.35変数宣言は型の後に変数名を書く。
構造体もまた然り。
0708デフォルトの名無しさん
2011/05/24(火) 23:55:34.38http://codepad.org/qeXhAizm の74行目のコメントアウトを外して、
ポインタ配列*gの内容を構造体*amのポインタ配列*genoに代入させるという動作をしたいのですが、
どのようにしてmallocで領域を確保していいのかが分かりません。
create_automaton関数内で領域を確保しなければいけないのは分かっているのですが、
*amに対して領域を確保すればよいのか、*genoに対して確保すればいいのか、
どちらでもなく全く別の領域を確保すればいいのかの見当が立てられません。
どなたかどのようにすれば良いかの指摘や手直しなどをお願いします。
0709デフォルトの名無しさん
2011/05/25(水) 00:29:35.89先ず第一に、混乱が見られるから配列としてアクセスしているところはポインタ逆参照演算子を使うのを止めよう。
つまり、(*(g+i))なんて書かずにg[i]と書いた方が判りやすいだろうと言うこと。
最初からそう書いていたら、scanf()に渡すのも(&(*g)+i)なんておかしなものでなく& g[i]でいいと判るだろう。
次にメモリ確保だが、上のことからwhileループを見るとam.nstateの2倍の領域がam.genoの先に必要だと判る。
これは、am.geno = calloc(sizeof(* am.geno), am.nstate * 2);とすればいいだろう。
何故だか理由は知らんが、一時的にgの先にも同じだけ必要だ。
従って、set_table()の先頭でint ns = am->nstate; int * g = calloc(sizeof(* g), ns * 2);として最後にfree(g);としておく。
実はもう一つ問題があって、main()のamは初期化されていないまま参照されている。
つまり、やりたいことはAutomaton * am = create_automaton();ではないだろうか。
その場合、create_automaton()でreturn & am;としなければならない。
全体的にポインタの取り扱いに慣れていないようだが、そのレベルでオートマトンなんて大丈夫か?
0710デフォルトの名無しさん
2011/05/25(水) 00:45:54.43そんぐらいのペースだったような気がする。
0711デフォルトの名無しさん
2011/05/25(水) 01:45:56.98ありがとうございます。
修正してみます。
高専の電気系学科から大学の情報系学科に編入したのですが正直情報系をナメてました。
Cは数年振りの上に基礎しかやってないのでポインタとかも完全に理解しきれていませんでした。
mallocやcallocも大学に来てから自学して使っているので正直分からないことだらけです。
今回のプログラムも大学の課題なのですが、正直できる気がしないんですよね…
>>710
上記の事情で3年生です。
0712デフォルトの名無しさん
2011/05/25(水) 01:59:57.850713デフォルトの名無しさん
2011/05/25(水) 02:03:17.49C言語の配列形式としてテキスト出力するプログラムを誰か作ってください。
出力例:
short pcm[] = {
16, // 16bit
48000, // 48000Hz
1234, // データ個数
12, 13, 20, 45, 56, 78, 78, 78, // 実データ
...
};
0714デフォルトの名無しさん
2011/05/25(水) 03:06:06.05宿題スレのほうが
0715デフォルトの名無しさん
2011/05/25(水) 03:53:11.17以下のように確かめたところ
#include <stdio.h>
int main()
{
int plus_max = 0x7fffffff;
int minus_max = -plus_max -1;
int x = abs(minus_max);
int y = -minus_max;
printf("%d,%08x\n",plus_max,plus_max);
printf("%d,%08x\n",minus_max,minus_max);
printf("%d,%08x\n",x,x);
printf("%d,%08x\n",y,y);
return 0;
}
このような結果を得ました
2147483647,7fffffff
-2147483648,80000000
-2147483648,80000000
-2147483648,80000000
intの最小値の絶対値を求めるような操作は
対応するintの正の数がないのでしてはいけない
プログラムを組むときに例外として認識しておくべき
ってことでいいんでしょうか(shortでも同じ)
0716デフォルトの名無しさん
2011/05/25(水) 04:01:58.450717デフォルトの名無しさん
2011/05/25(水) 04:06:14.360718デフォルトの名無しさん
2011/05/25(水) 04:37:11.35とくにどういう予想をしてたわけでもなく
どうなるのかな?と興味本位で確かめてみました
2147483648が返ってくると期待した場合、バグの原因になるのかなぁ
と、みなさんの意見が聞いてみたくなったので書かせていただきました
>>717
「limits.hに従わない」
という部分がよくわからないです
どういう状態をlimits.hに従わないというんでしょうか
おそらく
LONG_MAX long 型の最大値 (2147483647 以上)
LONG_MIN long 型の最小値 (-2147483647 以下)
の部分だと思うんですが
2147483647 以上か-2147483647 以下だとlimits.hに従わないと言うんでしょうか
ちなみに-2147483647をabsに渡すと2147483647が返ってきました
あと、std::domain_errorは標準C++ライブラリがスローすることは無いと
こちら
http://www.geocities.jp/ky_webid/cpp/library/027.html
に書かれていますが
私のプログラムだとstd::domain_errorがスローされるんでしょうか?
0719デフォルトの名無しさん
2011/05/25(水) 04:44:21.502進数符号付き32bitでこの計算が...
0720デフォルトの名無しさん
2011/05/25(水) 04:57:49.52ここCスレですよ。
あと、LONG_MINは-2147483648
absって最上位ビットクリアするだけかと思ってたけどちゃんと見てるんだな。
0721デフォルトの名無しさん
2011/05/25(水) 06:30:11.76どこか計算間違ってます?
符号付き整数の最小値って最大値*-1 -1だと思うんでそうしたんですが
>>720
具体的な数値で言うとそうなるんですが
limits.hでググるとそういう定義になってるって事が書かれてるんですよね・・・
とりあえず今回はwikipediaから引っ張ってきたんですが
http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA#.E6.95.B4.E6.95.B0.E5.9E.8B.E3.81.AE.E5.A4.A7.E3.81.8D.E3.81.95_.3Climits.h.3E
あと、私からdomain_errorの話を出したわけではないので悪しからずご了承ください
あ、私が知らないだけでC言語でもdomain_errorというのならすみませんです
0722デフォルトの名無しさん
2011/05/25(水) 06:38:53.00そうなるような計算式考えてみりゃいいじゃん
0723デフォルトの名無しさん
2011/05/25(水) 06:44:17.310724デフォルトの名無しさん
2011/05/25(水) 08:12:21.13>「暗黙のキャスト」とは?
失礼。暗黙のキャストという言葉はありませんね。暗黙の型変換(ボーランドの説明文ではよく使われていました)ということでお願いします。
>>696
>暗黙の型変換(あるいはプロモーション)
特に情報が失われる暗黙の型変換は、規格での integral/integer promotion (の一部)を指しています。
>>699
>標準関数で問題が出るケースはないと思ってよろし?
「問題が出る」や「標準関数」が何を指すのかよくわかりませんが、少なくとも可変長引数ではない関数で前方参照していなければ「問題ない」でしょう。
0725デフォルトの名無しさん
2011/05/25(水) 08:13:29.74char ch;
ch = getchar();
で嵌ってください。
0726デフォルトの名無しさん
2011/05/25(水) 08:33:42.59標準ライブラリに含まれている関数を、普通は標準関数と呼ぶと思うが。
で、わざわざ標準関数以外の例を出したと言うことは、標準関数では問題がないと思っているのかという質問だろう。
>>725
その例と>700とにどんな関係があるのか詳しく。
0727デフォルトの名無しさん
2011/05/25(水) 08:41:52.72ウケ狙いならば惜しいレベル。
「Java、C#、ひょっとしたらOcamlやScala」は何で書かれているか?
「JavaとかC#とか、ひょっとしたらOcamlやScala」を記述している言語は何で書かれているか?
という質問を想定したボケっぷりを塩味として利かせていただければ、より一層、磨きがかかるところだったんだが。
0728デフォルトの名無しさん
2011/05/25(水) 08:43:12.03後半。
失礼、これでは嵌りませんね。
>>700
char ch;
ch = (char)getchar();
で嵌ってください。
0729デフォルトの名無しさん
2011/05/25(水) 08:48:29.730730デフォルトの名無しさん
2011/05/25(水) 09:05:41.16キャストの有無に関係なく嵌るんじゃ?
0731デフォルトの名無しさん
2011/05/25(水) 09:27:10.700732デフォルトの名無しさん
2011/05/25(水) 10:32:00.63}宣言
じゃなくて
}
宣言
じゃだめのな?
0733デフォルトの名無しさん
2011/05/25(水) 10:36:15.480734デフォルトの名無しさん
2011/05/25(水) 10:36:29.960736デフォルトの名無しさん
2011/05/25(水) 11:03:40.83int foo;
でも
int
foo
;
でも構わん。同様に、
struct foo {int foo, bar;} foo;
でも
struct
foo
{
int
foo
,
bar
;
}
foo
;
でも構わん。好きにしろ。
>>735
失せるべきは誰か分かったかな?
0737デフォルトの名無しさん
2011/05/25(水) 11:04:54.460738デフォルトの名無しさん
2011/05/25(水) 12:53:24.94そういう用途でもCを勉強する必要ってありますか?
0739デフォルトの名無しさん
2011/05/25(水) 12:55:29.700740デフォルトの名無しさん
2011/05/25(水) 13:08:21.28返す値がひとつの場合でもポインタで変数を変更する意義ってありますか?
0741デフォルトの名無しさん
2011/05/25(水) 13:14:44.57場合によってはね
0742デフォルトの名無しさん
2011/05/25(水) 13:15:23.84どういう場合ですか?
0743デフォルトの名無しさん
2011/05/25(水) 13:16:16.600744デフォルトの名無しさん
2011/05/25(水) 13:45:44.35本当に一種類の値だけしか返さないならポインタを使う意義は薄いが、次のような例はしばしば見かける。
--
void set(int * offset, int * array, int value)
{
array[*offset++] = value;
}
--
int offset = 0;
int array[10];
set(& offset, array, 1);
set(& offset, array, 3);
set(& offset, array, 2);
--
これを戻り値で実装するとこうなる。
--
int set(int offset, int * array, int value)
{
array[offset++] = value;
return offset;
}
--
int offset = 0;
int array[10];
offset = set(offset, array, 1);
offset = set(offset, array, 3);
offset = set(offset, array, 2);
0745デフォルトの名無しさん
2011/05/25(水) 13:49:01.04他にset2()なるoffsetを2増やす関数があったりするケースだな。
例えば、プロトコルの実装とか帳票作成とか。
0746デフォルトの名無しさん
2011/05/25(水) 13:50:06.940747デフォルトの名無しさん
2011/05/25(水) 13:51:13.93そもそも、どうやったって1つしか返せねーよ。
0748デフォルトの名無しさん
2011/05/25(水) 13:51:56.930749デフォルトの名無しさん
2011/05/25(水) 13:52:57.08>>747
>>747
0750デフォルトの名無しさん
2011/05/25(水) 13:53:08.21どのようにクッキーを読むのでしょうか?
0751デフォルトの名無しさん
2011/05/25(水) 13:53:19.90不完全型使ったり
他の関数と合わせたり
0752デフォルトの名無しさん
2011/05/25(水) 14:12:29.980753デフォルトの名無しさん
2011/05/25(水) 14:14:19.89宣言時なら、ポインタ形であることを示すため。
逆参照時なら、逆参照を行なうことを示すため。
いずれの場合も、つけないと区別できないので「わざわざ」ではあっても必要。
0754デフォルトの名無しさん
2011/05/25(水) 14:15:55.50宣言時のときはいらない
0755デフォルトの名無しさん
2011/05/25(水) 14:16:00.09二つ返してみろよwww
0756デフォルトの名無しさん
2011/05/25(水) 14:18:51.81一番いい具体例を頼む。
0757デフォルトの名無しさん
2011/05/25(水) 14:20:43.37アドレスを格納するだけなんだから
0758デフォルトの名無しさん
2011/05/25(水) 14:23:45.39失せろカス
0759デフォルトの名無しさん
2011/05/25(水) 14:24:22.60そう
なのに*をつけないといけない
0760デフォルトの名無しさん
2011/05/25(水) 14:30:40.18あぁなんだ、記号が気に入らないって話か? だったら片っ端からtypedefしろよ。
typedef int * intPtr;
typedef int ** intPtrPtr;
typedef int *** intPtrPtrPtr;
and so on.
0761デフォルトの名無しさん
2011/05/25(水) 14:36:25.470762デフォルトの名無しさん
2011/05/25(水) 14:38:28.490763デフォルトの名無しさん
2011/05/25(水) 14:44:54.69規格やアセンブリ読んだことあるやつ教えてー
0764デフォルトの名無しさん
2011/05/25(水) 14:55:37.90コンパイラのオプション使えよバカ
0765デフォルトの名無しさん
2011/05/25(水) 15:01:16.860766デフォルトの名無しさん
2011/05/25(水) 15:01:59.47for文を使って
1〜100まで足した合計
1〜100までの偶数を足した合計
1〜100までの奇数を足した合計
をfor文ひとつを使ってやれる方法を教えて頂けますか?
宜しくお願いします。
0767デフォルトの名無しさん
2011/05/25(水) 15:08:24.82宿題スレへどうぞ。
0768デフォルトの名無しさん
2011/05/25(水) 15:11:28.310770デフォルトの名無しさん
2011/05/25(水) 15:18:41.58b=c=d=0;
for(a=1;a<=100;++a){
b+=a;
c+=a*(a%2==0);
d+=a*(a%2==1);
}
こんな感じじゃね
0771デフォルトの名無しさん
2011/05/25(水) 15:22:14.15for文を使って教えろといわれても困るな・・・
0772デフォルトの名無しさん
2011/05/25(水) 15:24:30.790773デフォルトの名無しさん
2011/05/25(水) 15:32:44.30なんですかそれ?
0774デフォルトの名無しさん
2011/05/25(水) 15:36:31.91b=c=d=0;
for(a=1;a<=100;++a){
b+=a;
if(a&1)d+=a;else c+=a;
}
こうか
0775デフォルトの名無しさん
2011/05/25(水) 15:56:50.23#include <stdio.h>
int sum();
int main(){
int i;
for(i=0;i<3;i++){
printf("%d\n",sum(i));
}
return 0;
}
int sum(int n){
if(n==0)
return 5050;
if(n==1)
return 2550;
if(n==2)
return 2500;
}
0776デフォルトの名無しさん
2011/05/25(水) 16:26:16.89まだC言語に触れたばかりなのでこのような優しい方が多い掲示板があることに感謝します。
皆さん、本当にありがとうございました。
0777デフォルトの名無しさん
2011/05/25(水) 16:29:24.290778デフォルトの名無しさん
2011/05/25(水) 17:53:32.250779デフォルトの名無しさん
2011/05/25(水) 19:06:10.36いいえ、キャストをつけなければ、最近の馬鹿じゃないコンパイラならば警告を出してくれます。
逆に、ご丁寧にキャストをつけると、本来出るべき警告まで抑制されてしまいます。
無論、馬鹿なコンパイラのことは知りませんが。
0780デフォルトの名無しさん
2011/05/25(水) 19:12:02.68前半。
>標準関数では問題がないと思っているのか
そう思っていましたが、キャストをつけなければいけない場合をひとつ思いつきました。
qsort() や bsearch() のコールバック関数を指定する場合は、
int cmp(struct foo *, struct foo *);
qsort(base, n, size, (int (*)(void *, void *))cmp);
という風にキャストをつけなければ警告が出てしまうコンパイラもありましたね。
キャストの有無にかかわらず、生成されるコードに変化はありませんけれども。
0781デフォルトの名無しさん
2011/05/25(水) 19:15:18.11ああ 警告出るから、コードを見直すチャンスがある と。
警告が出た後、
改めて 警告の解決に即キャストを使う という発想をする奴には
本質ではないような気がするがね
0782デフォルトの名無しさん
2011/05/25(水) 20:57:02.12そういう >>700 みたいな人間には、C はお勧めできないのは確かですね。
0783デフォルトの名無しさん
2011/05/25(水) 21:03:27.44そういう発想の人を対象とした話題だったの?
0784デフォルトの名無しさん
2011/05/25(水) 23:33:08.39printf()系は?
0785デフォルトの名無しさん
2011/05/25(水) 23:47:45.60printf() 系は可変長引数の関数ですが、特にキャストを必要としないでしょう。キャストがなくても動く仕様だと考えています。
最近のコンパイラはそれなりに賢くて、printf() の第一引数に対応していない可変長引数に対しては警告を出してくれるようです。
0786デフォルトの名無しさん
2011/05/26(木) 00:04:49.36キャストをつけなれば警告が出るような関数を指定すること自体がだめ。
0787デフォルトの名無しさん
2011/05/26(木) 00:55:31.67それはcmp関数の定義がまずい。
そこは
int cmp(void *a, void *b)
{
struct *pA = a;
struct *pB = b;
/* 以降pA, pBを使って比較関数を書く */
}
とすべき。
0788デフォルトの名無しさん
2011/05/26(木) 01:00:41.09可能ならソース付きで解説しろ
0789デフォルトの名無しさん
2011/05/26(木) 01:15:38.940790デフォルトの名無しさん
2011/05/26(木) 01:48:53.26こんな関数がありますfile_lead_eof(ファイルハンドル)
関数の定義の概略が[fileread_open関数で開いたファイルのファイルポインタが終端に達しているか
どうか調べたいときに使う]
↑どういう関数なのか用途がいまいちわかりません わかりやすく教えてください
自分はfopen,fcloseくらいは知ってます
0791デフォルトの名無しさん
2011/05/26(木) 01:53:12.52なるほど。
http://codepad.org/JzZGbaoP
コメントありがとうございました。
0792デフォルトの名無しさん
2011/05/26(木) 02:29:17.23終端に達したかどうかを調べたい時に使うんだと思うが。
fgetsなり使ったことあればわかりそうなもので。
0793デフォルトの名無しさん
2011/05/26(木) 02:36:12.160794デフォルトの名無しさん
2011/05/26(木) 03:39:58.34つ バークレーソケット
つ portal filesystem の tcp ドメイン(on BSD4.4)
0795デフォルトの名無しさん
2011/05/26(木) 05:29:37.29ググったら、クライアント用プログラムと、サーバー用プログラムを作らないといけないらしいことはわかった。
でも、サンプルコードが長すぎて意味不明だった。
クライアントのパソコンがhello worldって送ったら、サーバーのパソコンがそれ表示するプログラムを、
それぞれ10行以内で書くことは可能ですか?可能なら書け。
0796デフォルトの名無しさん
2011/05/26(木) 07:16:54.50printf("%d:%d\n", sizeof(int), -1);ではまれ。
0797デフォルトの名無しさん
2011/05/26(木) 07:54:19.78それ、ちゃんと警告出るぜ
printf("%zu:%d\n", sizeof(int), -1);
C99さいこー
0798デフォルトの名無しさん
2011/05/26(木) 08:17:07.89手元の環境(gcc 4.3.4)では、
printf("%ld\n", sizeof(long));
とすると、
qsort.01.c:37: error: format ‘%ld’ expects type ‘long int’, but argument 2 has type ‘unsigned int’
と警告がでましたよ。
sizeof(size_t) ≠ sizeof(T)
という T の書式指定にしてしまってもちゃんと警告がでますので、嵌る要素はありませんが?
%zu が使えないので環境によって書式指定を書き直さなければならない不都合はありますけども。
0799デフォルトの名無しさん
2011/05/26(木) 10:47:27.52printf(buf, sizeof(int));
0800デフォルトの名無しさん
2011/05/26(木) 10:58:55.72size_t はキャストなんてせずに"%zu"使えよ
0801デフォルトの名無しさん
2011/05/26(木) 11:33:40.23printf とかで充分だよ。
あとは標準入出力を繋ぐだけ。
そこは OS の仕事な。
0802デフォルトの名無しさん
2011/05/26(木) 12:39:03.530803デフォルトの名無しさん
2011/05/26(木) 12:41:13.73(おおよそ 子プロセス+パイプ かな?)
0804デフォルトの名無しさん
2011/05/26(木) 12:42:03.57あなたのお使いのコンソールの取扱説明書に当たってください。
GUI環境なら、大抵の場合コピーできることかと思われます。
もし仮に、「過去に出力した」ではなく「これから出力するだろう」文字列ということでしたら、
お使いのOSなどのリダイレクト機能についてお調べください。
0805デフォルトの名無しさん
2011/05/26(木) 12:44:38.05プログラム内で出力したのをそのプログラム内で取得したいのですが
0806デフォルトの名無しさん
2011/05/26(木) 12:45:46.44一旦sprintfがいいと思う
0807デフォルトの名無しさん
2011/05/26(木) 12:46:52.86出力したものは既にプログラムの中にはありませんから、プログラムだけでどうこうできるものではありません。
>806のように、事前に自前で確保しておく必要があります。
0808デフォルトの名無しさん
2011/05/26(木) 12:57:23.250809デフォルトの名無しさん
2011/05/26(木) 13:09:18.110810デフォルトの名無しさん
2011/05/26(木) 13:20:39.44作成したスレッドは、プロセスが終了すると処理はそこまでなのでしょうか?
それともそのスレッドが終了するまで処理されるのでしょうか?
また、前者の場合だったとして
DLLでスレッドを作成した場合DLLの処理が終了が終了した時点なのでしょうか?
それともプロセスが終了した時点なのでしょうか?
0811デフォルトの名無しさん
2011/05/26(木) 13:23:31.730812デフォルトの名無しさん
2011/05/26(木) 13:24:58.54それを設定する方法やそれを取得する方法を宜しければおしえていただけないでしょうか?
WINAPIでやっているのですが、此処まで来るとスレチになるのですかね
0813デフォルトの名無しさん
2011/05/26(木) 13:25:28.54環境によるけどjoinとかない?
0814デフォルトの名無しさん
2011/05/26(木) 13:32:04.16ありがとうございます。
0815デフォルトの名無しさん
2011/05/26(木) 13:34:22.710816デフォルトの名無しさん
2011/05/26(木) 13:49:00.59了解しました。
0817デフォルトの名無しさん
2011/05/26(木) 17:33:31.37#include <pthread.h>
double a = 0;
void* f(void* _)
{
int i = 1000*1000;
while(i-->0) {
a = a + 1;
}
}
main()
{
pthread_t f0, f1;
pthread_create(&f0, NULL, f, NULL);
pthread_create(&f1, NULL, f, NULL);
pthread_join(f0, NULL);
pthread_join(f1, NULL);
printf("%f\n", a / (1000 * 1000));
}
0818817
2011/05/26(木) 17:43:45.31f(NULL);
f(NULL);
printf("%f\n", a / (1000*1000));
}
なら実行結果が2になりますが
817のように複数スレッドでf()を並列実行した場合、実行結果が 2 にならずに、1.2345 のようになります。
817のmain()を書き換えずに、実行結果が2となるように f() と a を書き換えることは可能か?
可能なら書け。
0819デフォルトの名無しさん
2011/05/26(木) 18:16:26.79double a = 2;
void* f(void* _)
{
}
0820817
2011/05/26(木) 18:21:19.11#include <pthread.h>
double a = 0;
+pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void* f(void* _)
{
int i = 1000*1000;
while(i-->0) {
+ pthread_mutex_lock(&mutex);
a = a + 1;
+ pthread_mutex_unlock(&mutex);
}
}
これで2になるのだが、もっと自力でなんとかする『メカニズム』自体を自力で実装することで実現したい。
メカニズムを発案したまえ。
(ググって出てきたソースをコピペした的な優等生回答は0点とする。独創的なものほど高得点を与えゆ。)
0821デフォルトの名無しさん
2011/05/26(木) 18:23:34.87それは禁じ手とする
0822デフォルトの名無しさん
2011/05/26(木) 18:26:28.340823デフォルトの名無しさん
2011/05/26(木) 18:38:04.790824デフォルトの名無しさん
2011/05/26(木) 18:44:31.51自力なんだから自分でなんとかしろよw
0825デフォルトの名無しさん
2011/05/26(木) 18:44:57.360826817
2011/05/26(木) 21:57:39.890827デフォルトの名無しさん
2011/05/26(木) 22:01:50.650828デフォルトの名無しさん
2011/05/26(木) 22:32:56.46場合はハッシュでいいのでしょうか?
ハッシュを使わないならば関数を配列っぽく利用してリスト構造の位置を
保存っていう方法は危険でしょうか?
0829デフォルトの名無しさん
2011/05/26(木) 22:51:29.74データ構造とアルゴリズム
どんな構造にも得意不得意がある
重要な部分が得意になるように考える
なんとなくハッシュ+リストでいいかもねと思うが詳細不明なので何とも
後半はよく分からん
まあ詳細かかれても答えられんけどね
0830デフォルトの名無しさん
2011/05/26(木) 23:20:12.67まずは二分木
0831デフォルトの名無しさん
2011/05/26(木) 23:25:11.43リストにしなければならないかどうかを検討してみるとか。
0832デフォルトの名無しさん
2011/05/27(金) 01:02:40.08定数はdefineを使う
#define a 123456
定数の集合である配列はどうできるでしょうか?
int a[ ] = {1,2,3,4,5,6,};
↑これでは変数になってしまう
0833デフォルトの名無しさん
2011/05/27(金) 01:06:39.950834デフォルトの名無しさん
2011/05/27(金) 11:15:25.40メインの処理ってそこでDllMainが終わるまでとまるん?
そんともdllよんだらそのままスレッドみたくべつ処理になるのん?
0835デフォルトの名無しさん
2011/05/27(金) 12:07:24.78例:AbCd→aBcD
宜しくお願いします。
0836デフォルトの名無しさん
2011/05/27(金) 12:21:52.29isupper なら tolower
islower なら toupper
0837デフォルトの名無しさん
2011/05/27(金) 12:30:29.160838デフォルトの名無しさん
2011/05/27(金) 12:49:22.02連続して10文字以上を変換する方法がわかりません。
一文字ならできるんですが
0839デフォルトの名無しさん
2011/05/27(金) 12:56:53.090840デフォルトの名無しさん
2011/05/27(金) 13:00:54.77スレ違いだし やってみりゃいいじゃん。
0841デフォルトの名無しさん
2011/05/27(金) 13:38:34.57ありがとうございます。
0842デフォルトの名無しさん
2011/05/27(金) 13:43:25.44なるほどそんな風にもできたのか
0843デフォルトの名無しさん
2011/05/27(金) 14:08:33.470844デフォルトの名無しさん
2011/05/27(金) 18:02:31.81c言語のデバッガを紹介してください。
サクラエディタで書いて、
コマンドプロンプトでbcc32としています。
なるべくシンプルがいいです。
0845デフォルトの名無しさん
2011/05/27(金) 18:03:52.760846デフォルトの名無しさん
2011/05/27(金) 18:08:35.480847デフォルトの名無しさん
2011/05/27(金) 18:46:23.770848デフォルトの名無しさん
2011/05/27(金) 19:31:33.10今自分は単語の数を求めるところまで出来ましたが異なった単語を分けるのに詰まっています。
単語を保存、登録し、重複した単語を省いていこうとしてますが上手くいきません
助言を頂けないでしょうか?C言語です
↓今のプログラムです↓
http://pastebin.com/8RvS49Bt
0849デフォルトの名無しさん
2011/05/27(金) 19:38:46.890850デフォルトの名無しさん
2011/05/27(金) 19:49:05.19MacOSXでgccでコンパイルしてまいます.
0851デフォルトの名無しさん
2011/05/27(金) 19:51:26.300852デフォルトの名無しさん
2011/05/27(金) 19:54:17.30ロックすればいいよ
0853デフォルトの名無しさん
2011/05/27(金) 19:56:38.86今のプログラムを見ていないけど、重複していれば登録しないようにすればいいと思うよ
>>850
C++のコードを変更できるならextern C、できないならマングリングされた名前で呼ぶ
0854デフォルトの名無しさん
2011/05/27(金) 20:00:15.12しかもスコープも関数内っぽくて外側のローカル変数呼べるとは
なんか慣れないものを見ると気持ち悪い
0855デフォルトの名無しさん
2011/05/27(金) 20:02:01.77static int lock = 0;
static
void __lock(void)
{
while(__sync_val_compare_and_swap(&lock, 0, 1) != 0) {
}
}
static
void __unlock(void)
{
__sync_val_compare_and_swap(&lock, 1, 0);
}
void* f(void* id)
{
int i = 1000 * 1000;
while(i-->0) {
__lock();
a++;
__unlock();
}
}
0856855
2011/05/27(金) 20:51:53.03c++0xなら言語仕様としてアトミック操作がサポートされる予定らしいが、cでもサポートされてほしいと思った。
static int lock = 0;
static
void __lock(void)
{
A:
if(lock == 0) {
lock++;
if(lock == 1) {
return;
}
else {
lock = 0;
}
}
goto A;
}
static
void __unlock(void)
{
lock = 0;
}
0857デフォルトの名無しさん
2011/05/27(金) 20:54:06.93比較回数を調べたいのですが
以下のものだと比較回数が僅かに少なく、データファイル値域外の判定をしなかった
またはデータファイル値域外判定のときに比較回数を数えなかったからだといわれました。
どこをどうすればいいの?
0858デフォルトの名無しさん
2011/05/27(金) 20:56:10.22int search_seqr(int key, int size, int *array){ int i;
count = 0; //比較回数
if(array[size - 1] < key) //末尾要素より大きい
++count;
for(i = 0; i < size; i++){ //終了条件
++count; //比較回数カウント
if(key == array[i]) //探索値が見つかった
return count; //比較回数を返す
if(key < array[i]) //配列中に一致する要素がない
return count;
}
return count;
0859デフォルトの名無しさん
2011/05/27(金) 22:01:55.61C1xに入る予定です
0860デフォルトの名無しさん
2011/05/27(金) 22:10:48.35一部コンパイラ(gccのみ?)しかコンパイルできないので関数内に関数を定義しないほうがよい
方針は言ってるとおりでいいと思うし、Entryの実装がおかしい以外は大体いいかな?
おかしい点は、文字列とポインタ関連
・63行目if条件がいらない
・68行目では何がしたいのか?intに"\0"を入れるのは間違っている
こういう宿題的なプログラムを作るのが久しぶりで楽しかった
http://pastebin.com/8pBgue5i
0861デフォルトの名無しさん
2011/05/27(金) 22:19:13.22Pascalから見掛けるようになったが
C++は関数内でクラスは定義出来るのでそれで代用してるけど
あまり意味ない
0862デフォルトの名無しさん
2011/05/27(金) 22:37:02.04char *mystrdup(const char *src)
みたいなのにcharの配列を渡しても警告は出ないが、
int exist(const char *list[], int list_num, const char *word)
としたときlistにchar*の配列を渡すとincompatible pointer typeって警告が出る
listはそれ自身もそのポインタの先も変更する気がない場合
引数の方は本来どう定義するべきもの?
0863デフォルトの名無しさん
2011/05/27(金) 22:38:25.41×引数の方は本来どう定義するべきもの?
○引数の型は本来どう定義するべきもの?
0864デフォルトの名無しさん
2011/05/27(金) 22:52:40.63それって大学の宿題なの?
0865デフォルトの名無しさん
2011/05/27(金) 23:22:25.19ググったけど英語ページしかでてこない読めないので日本語でだれかc1xの解説よろ
0867デフォルトの名無しさん
2011/05/28(土) 01:15:26.41関数内関数がクロージャとは限らんだろう
0868デフォルトの名無しさん
2011/05/28(土) 01:45:59.46限らないというか、pascalのやC++の関数の中のクラス定義は
クロージャとだいぶ違うよね。
0869デフォルトの名無しさん
2011/05/28(土) 02:26:02.47typedef const char (*MYARR)[];
void func(MYARR list){}
void main(void){
char *hoge[1];
func((MYARR)hoge);
}
呼ぶ時にキャストしないといけないのがなんとも。
0870デフォルトの名無しさん
2011/05/28(土) 02:44:22.47ありがとうございます
現在、chipmunkとbox2Dのどちらかを使用してゲームをつくろうとしていました。いろいろ試行錯誤してみます。
0871デフォルトの名無しさん
2011/05/28(土) 06:01:38.87まだ Borland が健在だった時期に
BCC 5.5 と一緒に無償配布されてた
Turbo Debuger ってもう配布終了したの?
0872デフォルトの名無しさん
2011/05/28(土) 07:04:35.46#include<stdio.h>
int main(void)
{
int i,n;
n=52;
i=1;
while(i++ < 52 ) {
if(n%i == 0) {
printf(" %d は%dで割り切れる.\n",n,i);
}
}
return 0;
}
↑の実行結果で「51は1で割り切れる」が抜けて画面に出力されます。なぜでしょうか?
ほんと、こんな質問してすみません・・
0873デフォルトの名無しさん
2011/05/28(土) 07:41:25.83if(n%i == 0) {
printf(" %d は%dで割り切れる.\n",n,i);
}
i++;
}
ループの最初でiが2になってるから
0874デフォルトの名無しさん
2011/05/28(土) 07:52:48.63わかりました、ありがとうございます。
while文の条件にインクリメント演算子を使って上記のソースの実行結果と同じにするにはどうすればよいでしょうか?
0875デフォルトの名無しさん
2011/05/28(土) 08:22:48.83do {
if(n%i == 0) {
printf(" %d は%dで割り切れる.\n",n,i);
}
} while(i++ < 52 );
か
i = 0;
のどちらか
0876デフォルトの名無しさん
2011/05/28(土) 08:50:49.02do whileが妥当なときにwhileにするな。
0877デフォルトの名無しさん
2011/05/28(土) 08:58:13.270878デフォルトの名無しさん
2011/05/28(土) 09:14:43.160879デフォルトの名無しさん
2011/05/28(土) 10:29:30.93> while文の条件にインクリメント演算子を使って上記のソースの実行結果と同じにするにはどうすればよいでしょうか?
評価順とかわからない(上のプログラムの動作が予想できない)なら、インクリメントとか
whileの条件式から外に出した方がいいでしょ。
どうでもいい工夫のための質問するより、わかりやすいプログラム書きなよ。
0880デフォルトの名無しさん
2011/05/28(土) 12:43:12.86大学の宿題でwhileの条件式にインクリメント演算子を使って書き直せとあったもので…
0881デフォルトの名無しさん
2011/05/28(土) 14:29:43.880882デフォルトの名無しさん
2011/05/28(土) 14:31:02.560883デフォルトの名無しさん
2011/05/28(土) 14:49:56.670884デフォルトの名無しさん
2011/05/28(土) 16:29:21.050885デフォルトの名無しさん
2011/05/28(土) 18:06:04.730886デフォルトの名無しさん
2011/05/28(土) 18:19:48.76文系がパンキョーでとってるのかもしれないし
0887デフォルトの名無しさん
2011/05/28(土) 18:51:28.730888デフォルトの名無しさん
2011/05/28(土) 19:53:49.650889デフォルトの名無しさん
2011/05/28(土) 19:54:39.580890デフォルトの名無しさん
2011/05/28(土) 19:58:24.090891デフォルトの名無しさん
2011/05/28(土) 21:27:00.49ただ単位はそう簡単に取れるもんじゃない。パソコン幼少時からいじってきた
貴様らと違って大学入ってからコンピュータいじる奴もいるんだよ。
特に大学1年の間はなれない事が多く掲示板や参考書に頼る事も多い。
0892デフォルトの名無しさん
2011/05/28(土) 21:41:43.760894デフォルトの名無しさん
2011/05/28(土) 22:19:40.630895デフォルトの名無しさん
2011/05/28(土) 22:34:47.70なんだよ、ソースを1行変えたからテスト検証テスト検証・・・
コンパイラが変わったからテスト検証テスト検証・・・
0896デフォルトの名無しさん
2011/05/28(土) 22:35:21.120897891
2011/05/28(土) 22:39:35.68黙れつってんだろ。
プログラミング何て単純作業だろうが。
馬鹿でも時間かけて凝ればたまにいいの作るし。
お前はそんなに偉いんか?
0898デフォルトの名無しさん
2011/05/28(土) 22:41:26.27そりゃその1行の変更やコンパイラの変更で痛い目にあってるからしょうがない。
0899デフォルトの名無しさん
2011/05/28(土) 22:41:31.53例えば何なら単純作業じゃないの?
0901デフォルトの名無しさん
2011/05/28(土) 22:50:43.03そっか
0903デフォルトの名無しさん
2011/05/28(土) 22:56:26.650904デフォルトの名無しさん
2011/05/28(土) 23:00:14.26どうやって使えばいいんだよコノヤローオメー
0905デフォルトの名無しさん
2011/05/28(土) 23:19:01.46> スポーツ選手、漫画家などなど。
ひたすらバット振り続けるとか、スクリーントーンを張り続けるとか...
単純作業の連続だぞ。
0906デフォルトの名無しさん
2011/05/28(土) 23:24:01.940907デフォルトの名無しさん
2011/05/28(土) 23:24:58.80振り方一つだって、色んな工夫してるぞ。昨日と同じなんてしていない。
スクリーントーンを張るのは、普通アシスタントだろう。
そういうのを自分でやってるなら、まだ売れてない漫画家。
そういうのに時間をとられてたら、クリエイティブな仕事はできない。
0909デフォルトの名無しさん
2011/05/28(土) 23:27:00.00ストーリーを抜いて画だけで考えると
単純作業と思えるほど自然に画を画けないと
締め切りに間に合わないだろうな。
0910デフォルトの名無しさん
2011/05/28(土) 23:27:07.05宇宙そのものがそもそも単純作業の集合でできていると
0911デフォルトの名無しさん
2011/05/28(土) 23:27:14.18じゃあ宿題も適当に作ってできたいいものを提出してればいいじゃん
なにもこんなところで要らない知識を得る必要もない
0912デフォルトの名無しさん
2011/05/28(土) 23:28:54.22単純作業じゃない仕事をクリエイティブな仕事って言うんだよ
何を言ってるんだ
クリエイティブな仕事っていうのは業種にかかわらず仕事の仕方しだいだよ
0913デフォルトの名無しさん
2011/05/28(土) 23:32:11.44スクリーントーンを貼らない漫画家はどうですか
てか、スポーツ選手がクリエイティブな仕事であるっていうのは初めて聞いたかも知れん。
単純作業じゃないことは確かだけど、クリエイティブ?
0914891
2011/05/28(土) 23:37:32.53ゆとりは寝ろ。
>>912
プログラミングの場合はなぁ、むりやり頭ひねって、こねくり回して
生み出したぎこちないアイデアでもマシンパワーで何とでもなるんだよ。
0915デフォルトの名無しさん
2011/05/28(土) 23:37:46.61>振り方一つだって、色んな工夫してるぞ。昨日と同じなんてしていない。
ん?
プログラマだって工夫はしてるだろ。
してない?
だから君は単純作業しか「させてもらえない」んだろ。(w
0916891
2011/05/28(土) 23:40:57.83スポーツ選手や漫画家のほうが、プログラマーより数少ないだろw
どっちのほうが簡単な職業かは口に出さずとも明白。
0917デフォルトの名無しさん
2011/05/28(土) 23:42:30.33競技人口比べたら圧倒的にスポーツ選手のほうが多いぞ
0918デフォルトの名無しさん
2011/05/28(土) 23:42:56.200919デフォルトの名無しさん
2011/05/28(土) 23:44:23.72競技人口多くても、少数しかなれないのがスポーツ選手だよ。
0920デフォルトの名無しさん
2011/05/28(土) 23:46:38.80スポーツ選手かっけー
0922デフォルトの名無しさん
2011/05/28(土) 23:48:23.84君たちは一年間に何本漫画を読んだんだ?
0923デフォルトの名無しさん
2011/05/28(土) 23:50:06.370924デフォルトの名無しさん
2011/05/28(土) 23:52:08.48誰にでもできるはずの作業を質問するなよ
0925デフォルトの名無しさん
2011/05/28(土) 23:53:27.65お前が何が気に食わないか知らないけど
プログラマー、エンジニアだけに限らずほぼ全職業そうなんじゃね
0926デフォルトの名無しさん
2011/05/28(土) 23:55:42.21職業として食っていけるかどうかは
どれだけ需要があるかが関係するだけのこと
プログラマはそれだけ需要があるってだけ
プロスポーツ選手はそんなに人数いらないってだけ
0927デフォルトの名無しさん
2011/05/28(土) 23:57:46.47完全論破終了。
0928デフォルトの名無しさん
2011/05/29(日) 00:00:01.88じゃあその金をどこから持ってくるんだって話。
0929デフォルトの名無しさん
2011/05/29(日) 00:00:03.17その考えていけば文系の仕事に携わってる人間はは理系の仕事のそれより
多いよな。
0930デフォルトの名無しさん
2011/05/29(日) 00:00:42.45> 特に大学1年の間はなれない事が多く掲示板や参考書に頼る事も多い。
これについてだけど、大学入ってからコンピュータいじったし
インターネットは存在していたけど、頼るような掲示板は知らなかったし、
むしろインターネットに不慣れだった、そんな俺でも単位取れたよ。
自分で書いてるように参考書に頼ったらどう?
0931デフォルトの名無しさん
2011/05/29(日) 00:00:50.680932デフォルトの名無しさん
2011/05/29(日) 00:02:30.70防大出の友達言ってた
0933デフォルトの名無しさん
2011/05/29(日) 00:02:48.71身に付いてるかどうかは別のような
0934デフォルトの名無しさん
2011/05/29(日) 00:06:14.91>>930
何言いたいの?
単位取れるか取れないかは人それぞれだし。
>>928
経営者が一番偉いんじゃないか?
0935デフォルトの名無しさん
2011/05/29(日) 00:07:04.51どういうこと?
文系のほうが需要が多いってこと?そうなの?
0936デフォルトの名無しさん
2011/05/29(日) 00:08:29.81プログラマはそれで生活してるってだけでプロって言うのは
抵抗あるんで職業プログラマって言ってる。
日本の職業プログラマ60万人のうち、6,7割は趣味プログラマーに
負けてるレベルだしな。
0937デフォルトの名無しさん
2011/05/29(日) 00:08:51.78えーとここなんのスレだったけ?
0938デフォルトの名無しさん
2011/05/29(日) 00:10:13.570939デフォルトの名無しさん
2011/05/29(日) 00:12:02.630940デフォルトの名無しさん
2011/05/29(日) 00:14:23.65マ版ネタだね。
0941デフォルトの名無しさん
2011/05/29(日) 00:14:31.71プログラマー>>趣味プログラマーだと思うぞ。
実践で役に立つものを作ってこそ有能なんだよ。
スポーツ選手に絶対的価値を見出してる俺でもプロフェッショナルという
事は実践、つまり制限された状況で発揮する能力だと思うから。
0942デフォルトの名無しさん
2011/05/29(日) 00:16:19.21一体みんな誰と戦っているんだ・・・
0943デフォルトの名無しさん
2011/05/29(日) 00:16:32.70システムエンジニアは別だろw?
情報系の学部出たら誰でもなれるじゃねーかwww
0944デフォルトの名無しさん
2011/05/29(日) 00:16:45.29使えない人の多さですねわかります
0945デフォルトの名無しさん
2011/05/29(日) 00:18:43.14ソースとしては小さいモジュールに分かれていてヘッダファイルが複数あったとして、
ひとつのヘッダファイルを読めば1機能(複数モジュール使用)が使えるようになるってふうでもいいのでしょうか?
0946デフォルトの名無しさん
2011/05/29(日) 00:19:28.38所詮、ちょっと器用なメカ好きお兄ちゃんみたいな体だろwww
0947デフォルトの名無しさん
2011/05/29(日) 00:21:14.15独学でやってるやつは変なクセがついててダメだ」みたいな
ことを言ってるやつがいるけど、ああいうのは趣味の学生に
負けてるんだろうな。
0948デフォルトの名無しさん
2011/05/29(日) 00:23:42.66lhaの吉崎さんは全然違う職を持ってる趣味プログラマーだったような
0949デフォルトの名無しさん
2011/05/29(日) 00:27:42.26たいていの人間はプログラミングになんて興味ないから。
0950デフォルトの名無しさん
2011/05/29(日) 00:28:34.05職業でも、なんとなくノルマこなしてるだけって人もいるし
0951デフォルトの名無しさん
2011/05/29(日) 00:30:18.77自分で考えたものが動くって 男の子のロマンだし。
ここのみんなは楽しんでないんだね。
0952デフォルトの名無しさん
2011/05/29(日) 00:31:48.780953デフォルトの名無しさん
2011/05/29(日) 00:32:04.90あー、確かに
自分で設計した物が形になっていくのは楽しいな
0954デフォルトの名無しさん
2011/05/29(日) 00:32:11.70不可能、所詮パズル遊びなのがプログラミングの分野。
0955デフォルトの名無しさん
2011/05/29(日) 00:34:14.190956デフォルトの名無しさん
2011/05/29(日) 00:34:21.170957デフォルトの名無しさん
2011/05/29(日) 00:36:24.15>職業でも、なんとなくノルマこなしてるだけって人もいるし
多くの職業プログラマに求められているのは、
言われたとおりに、余計なものがないコードを書くこと。
早過ぎもせず、送れもせず、予定通りに要求仕様を消化してくれること。
0958デフォルトの名無しさん
2011/05/29(日) 00:37:44.09変数名を漫画のキャラクター名にしたりといった遊び心も忘れずに
そういうのが工業製品としてはマイナス。
たとえば仕事で急いでいるときにタクシー呼んだら運転手の好みのキャラの痛車だったりとか困るだろ?
0959デフォルトの名無しさん
2011/05/29(日) 00:44:38.13支援ツールみたいに自由にかけるものだと、すごいコード書く人、いるよね。
良いか悪いかは別にして、仕事ってそういうものだと思った。
0960デフォルトの名無しさん
2011/05/29(日) 01:15:51.90独学でツールを作って公開(できればソースも)している奴は多分文句なしでしょうね。
独学でなんかしてて人様に見せたこともないのに
つらつらと語りだすのは変な癖というか人間自体が変です。
まあ大抵の新人はオマエ舐めてるだろっていうレベルです。
0961デフォルトの名無しさん
2011/05/29(日) 01:22:51.29確かに納期がひっつくと死ぬほど苦しいですね。プロって大変ですね。
0962デフォルトの名無しさん
2011/05/29(日) 08:01:25.430963デフォルトの名無しさん
2011/05/29(日) 08:28:07.43> ひとつのヘッダファイルを読めば1機能(複数モジュール使用)が使えるよう
> になるってふうでもいいのでしょうか?
その考えは正しいと思うし、普通にやられてる。
処理系が提供しているヘッダーファイル見てみればいい。
あと、事前に "インクルードガード" でググってみておいたほうがいい。
0964デフォルトの名無しさん
2011/05/29(日) 18:59:37.00どっかのってるサイトとかないですか?
0965デフォルトの名無しさん
2011/05/29(日) 19:13:31.350966デフォルトの名無しさん
2011/05/29(日) 21:09:45.67プログラム作成
0967デフォルトの名無しさん
2011/05/29(日) 21:11:46.22設計は何でしょう?プログラムのイメージについて書くのですか?
#include<stdio.h>
int main(void)
{
int a,b;
a=1;
b=1;
printf("a+b=\n");
printf("%d\n",a+b);
}
だと設計と実装はどう記述されるんでしょうか?
0968デフォルトの名無しさん
2011/05/29(日) 21:16:07.130969デフォルトの名無しさん
2011/05/29(日) 21:20:41.88プログラムの場合設計書を見ながら実装を書くという概念が全く持って理解できません。
教えてください・・・
0970デフォルトの名無しさん
2011/05/29(日) 21:21:36.73データフローが設計書だと思う
0971デフォルトの名無しさん
2011/05/29(日) 21:26:21.98どんな屁理屈でもってそんな大層な事をやる必要があるんでしょう。
今みたいにデバッガで動かしながら開発するのは効率が悪かった
そのころの開発スタイルに慣れてるやつが設計と開発を分けて非効率的なやり方を
おしつけてるだけだよ。いきなりコードを書くのが正しい
0973デフォルトの名無しさん
2011/05/29(日) 21:31:19.920974デフォルトの名無しさん
2011/05/29(日) 21:33:59.140975デフォルトの名無しさん
2011/05/29(日) 21:38:25.15ここに書かれている事に僕も同意なんですよ。
プログラムの設計とか全く意味が分かりません・・・
0976デフォルトの名無しさん
2011/05/29(日) 21:43:29.440977デフォルトの名無しさん
2011/05/29(日) 21:46:00.140978デフォルトの名無しさん
2011/05/29(日) 21:49:14.48上のレイヤーの設計は必要だけど。
0979デフォルトの名無しさん
2011/05/29(日) 22:06:04.20だから>>967のような一言ですべてを表せるプログラムに設計はいらない
0980デフォルトの名無しさん
2011/05/29(日) 22:08:15.50「機能ごとに」というのをどういう風に区切るか、どういう階層になるのか、などの考え方をまとめる必要がある
こういうのも設計で、これは確実に必要
0981デフォルトの名無しさん
2011/05/29(日) 22:08:50.060982デフォルトの名無しさん
2011/05/29(日) 22:13:12.04そのソースを、丸と線と矢印と名前だけで、概念を簡単な図にしてみろ。
極論言うと、それが設計だよ。
0983デフォルトの名無しさん
2011/05/29(日) 22:24:59.711を記憶 1→□
1を記憶 1→△
する処理�@
□+△を計算する処理�A
�@→�A
外部(出力)
??????????�B←/*1+1の結果2を表示する*/
>>982
こんな感じですか?
0984デフォルトの名無しさん
2011/05/29(日) 22:31:51.09図で書く概念の中に実装が混じる。
0985デフォルトの名無しさん
2011/05/29(日) 22:45:15.76そんな詳細に書かないでいい。もっと漠然としてていい。
○
|ーーー>画面だす
○
こんなんで十分。
0986デフォルトの名無しさん
2011/05/29(日) 22:48:48.54うんww
0987デフォルトの名無しさん
2011/05/29(日) 23:32:01.380989デフォルトの名無しさん
2011/05/30(月) 00:17:26.31まじめにお願いします・・・
>>987の通りじゃないですか・・
0990デフォルトの名無しさん
2011/05/30(月) 00:56:29.03うっとおしいから次スレには来んな
0991デフォルトの名無しさん
2011/05/30(月) 01:18:18.92○
|ーーー> 〜○ [ ]
○
正しくはこうだ
0992デフォルトの名無しさん
2011/05/30(月) 01:49:24.47scanfによって整数値を入力させ、1からその値までの間にある全ての素数を順に列挙するプログラムをつくりなさい。
これのコードを、わかりません。
教えてください
0993デフォルトの名無しさん
2011/05/30(月) 02:10:09.40あなたの日本語がわかりません。取り敢えず宿題スレは如何でしょう。
0994デフォルトの名無しさん
2011/05/30(月) 02:12:34.97Wikipediaの素数判定の項目見ると
試し割りのだけどCのコードが載ってるよ
0996デフォルトの名無しさん
2011/05/30(月) 03:31:35.420997デフォルトの名無しさん
2011/05/30(月) 06:20:07.050998デフォルトの名無しさん
2011/05/30(月) 06:21:49.04C言語なら俺に聞け(入門編)Part 85
http://hibari.2ch.net/test/read.cgi/tech/1306704064/
0999デフォルトの名無しさん
2011/05/30(月) 07:14:56.29おつうめ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。