[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/09 19:03 / Filesize : 146 KB / Number-of Response : 644
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132



1 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 13:10:57 ]
このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244

他の過去ログはここに
nssearch.hp.infoseek.co.jp/clang/
前スレ
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
pc11.2ch.net/test/read.cgi/tech/1170338926/


GUIなどの標準Cではできない事の質問、ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.42【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1188748806/
C/C++の宿題を片付けます 95代目
pc11.2ch.net/test/read.cgi/tech/1187944110/


【このスレ住人としての心得】
ビットシフトはなんの役に立つのでしょうか でググれ

175 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:25:57 ]
>>172
そうなんですか。前者を使うほうがいいんですね。

176 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:33:04 ]
>>175
いいえ。後者を使うべきです。

177 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:33:33 ]
なんで?

178 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:38:37 ]
前者を使うべき理由がないからです。

179 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:38:43 ]
どっちでもいいだろ

180 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:39:56 ]
それだと 後者を使うべき理由が無いから前者を使うべきです とも言える

181 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:05:35 ]
>>172さんへ
質問者です。それは本当ですか?
ということは、前者を使ったほうがいいってことですか?
どうなんでしょうか?


182 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:09:43 ]
>>181
C89とC99あたりの違いで言ってるんだろうけど本当だよ

183 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:11:06 ]
ボーランドのbccを使っているんですが、
その場合も前者を使ったほうがいいですか?



184 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:12:06 ]
バージョンくらい書けよ

185 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:13:22 ]
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
ってなってます

186 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:14:37 ]
Borland C++Compiler 5.5.1
です。

187 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:43:05 ]
C++だと、初期化と代入が区別されるから、Cでも意識して使いわけてもいいんじゃないか?


188 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:45:33 ]
どういうこと?

189 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:55:52 ]
>>127,146-147,166
(unsigned int)(-1) は 6.3.1.3 p2 により UINT_MAX と同じになる。

"if the new type is unsigned, the value is converted by repeatedly adding or
subtracting one more than the maximum value that can be represented in the new type
until the value is in the range of the new type."

-(unsigned int)1 は 6.2.5 p9 により UINT_MAX と同じになる。

"A computation involving unsigned operands can never overflow,
because a result that cannot be represented by the resulting unsigned integer type is
reduced modulo the number that is one greater than the largest value that can be
represented by the resulting type."

引用は ISO のドラフト (n1124) からね。

190 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:11:50 ]
>>180
いいえ、後者を使うべき理由ならあります。
宣言以降代入までの不定値が存在する期間を排除することができるというのがそれです。

191 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:21:32 ]
互換性のために前者で書いたほうがいい

192 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:26:22 ]
Cで前者にしか対応してないコンパイラがまだまだ普及してる
互換性を切り捨てるには時期尚早

193 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:29:23 ]
っていうか、俺涙目みたいな・・・



194 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:46:58 ]
代入と初期化は違うんだよ!
初期化を怠ると、後でひでーめに遭うんだよ!
むしろ初期化は強制すべきなんだよ!

195 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:51:24 ]
そんな事言ってる君らはどのコンパイラ使ってるの?

196 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:54:37 ]
Kylix

197 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:59:33 ]
>>189
ありがとうございます。勉強になりました。

198 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 20:01:38 ]
>>194
私をお呼びですか?フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ

199 名前:デフォルトの名無しさん [2007/09/23(日) 20:02:50 ]
>194
代入を禁止したらいい。


200 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 20:09:43 ]
・変数の初期値は必ず決める
・変数への代入は可能な限り行わない(変数を使いまわさない)

でもコンテナとかポインタ先への間接代入はしょうがないよね。


201 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 20:24:46 ]
関数型言語でおk

202 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 20:41:26 ]
C++でもSICPの問題がとけるんだからきっとCでも解けるさ

203 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 21:14:28 ]
>>191
>>192
どこに初期化ができないCコンパイラがあるというんだ?
だれもブロックの途中だなんて一言も言ってないわけで、宣言できる場所でなら初期化代入は必ずできるわけだが。



204 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 21:29:25 ]
構造体変数のコピー初期化ができないコンパイラには遭ったことがある。
struct s a = {...}; /* これはいける */
struct s b = a; /* こっちはエラー */

205 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 21:31:01 ]
>>204
スレタイに注目。

206 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 21:46:28 ]
>>204
こいつ最高にアホ。

207 名前:204 mailto:sage [2007/09/23(日) 21:47:18 ]
>>205 何か問題でも?

208 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 22:03:51 ]
K&Rならいざしらず、ISOその他では204ができないといけないことになっている。

209 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 22:08:32 ]
ビットフィールドは、ビット演算を使わないように気を付ければ移植性は問題無しですか?

210 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 22:15:17 ]
>>209
メモリ上のレイアウトを意図したビットフィールドの使い方には移植性に問題があります。
ビット演算を使うかどうかは、あんまり関係ないでしょう。

211 名前:209 mailto:sage [2007/09/23(日) 22:47:20 ]
>>210
どうもありがとう。

ちなみに、処理速度的にはやっぱりビットフィールド使うとたいていの場合遅くなるもんですか?
どっちみち今やってるプログラムはメモリの制約があるので使わざるを得ないんですが…

212 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 22:55:49 ]
>>211
遅くなることのほうが多いだろうけど、使い方とコンパイラの実装の相性による。
速度は実測が基本。

213 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 17:19:46 ]
プログラミングが上達するコツ
pc11.2ch.net/test/read.cgi/tech/1190555031/



214 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 21:50:47 ]
clock()が本来返すべき値がclock_tの範囲を超えた場合ってどうなるんですか?

215 名前:デフォルトの名無しさん [2007/09/24(月) 21:55:11 ]
If the processor time  used is  not  available  or  its  value cannot be represented, the function shall return the value (clock_t)-1.





216 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 21:59:26 ]
>>215
ありがとう。

217 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 15:39:42 ]
int sum;
int dig;
とint sum,dig;
とはどう違いますか?

218 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 15:59:30 ]
違わない

219 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 16:17:39 ]
C99の標準機能だけで、UNIXのsleepコマンドみたいな機能は実現可能ですか?

220 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 16:19:40 ]
whileとforはどう使い分けるべきですか?

221 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 17:04:51 ]
>>219
不可能

>>220
whileとforの仕様を本当に理解していたらそんな出るはずない
教科書読み直せ

222 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 17:05:22 ]
×そんな
○そんな質問

223 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 18:10:20 ]
そんなあー



224 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 18:20:56 ]
>>223
>>223
>>223
>>223
>>223

225 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 21:46:08 ]
>>219
system("sleep

226 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 21:57:02 ]
");

227 名前:デフォルトの名無しさん [2007/09/26(水) 00:47:34 ]
JIS X3010 の 6.2.6.2 を読んだだけでは分からなかったのですが
int の負数の表現が 2 の補数で short の負数の表現が 1 の補数
という処理系はありえますか?


228 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 01:08:58 ]
灯油を燃やした熱で水蒸気を発生させてタービンを回して発電した電力で水を電気分解して得られた水素と酸素を爆発させてシリンダーを動かしてプロペラに伝えて走るホバークラフトくらいにはありえる

229 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 01:39:47 ]
面白くない

230 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 01:46:44 ]
>>228
ロジン貸そうか

231 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 15:21:00 ]
int goto;
int while;
int for;
とかintに関数を使ってもいいですか?

232 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 15:23:13 ]
>>231
gotoもwhileもforも関数じゃないが、予約語は変数名に使えない。


233 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 15:43:22 ]
#include <stdio.h>
int main(void)
{
int kara;
int made;
int kankaku;
int cnt;

printf("何cmから:"); scanf("%d",&kara);
printf("何cmまで:"); scanf("%d",&made);
printf("何cmごと:"); scanf("%d",&kankaku);

for (cnt=0; (kara+cnt)<=made; cnt=+kankaku) {
printf("%dcm ",kara+cnt);
printf("%.2fkg\n",(double)(kara+cnt-100)*0.9);
}

return (0);
}

これどこがミスってますか?



234 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 15:43:33 ]
>>232
thx!

235 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 15:44:21 ]
>cnt=+kankaku
ですね。thx!

236 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 19:11:09 ]
while (!cont)
ってどういう意味?


237 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 19:16:18 ]
!は以外ってこと
contだけのときは、0
!contは!0ってこと。
だから、0以外

238 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 19:55:47 ]
>>236はどういう意味ですか?
!contっていう部分です

239 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 19:58:11 ]
否定ってこと。0のこと。

240 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 20:00:13 ]
>>239
???

>>238
cont=0;
printf("cont=%d !cont=%d\n", cont, !cont);
cont=1;
printf("cont=%d !cont=%d\n", cont, !cont);
cont=2;
printf("cont=%d !cont=%d\n", cont, !cont);
cont=-1;
printf("cont=%d !cont=%d\n", cont, !cont);

241 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 20:03:21 ]
contの反対ですよ。

242 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 20:08:26 ]
アホばっか

243 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 20:08:32 ]
while文は0以外の時に真となりループする。
while(cont)は、contが0以外だったらループする。
while(!cont)は、「contが0以外」以外だったら、つまり0だったらループする。



244 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 20:12:15 ]
>while(!cont)は、「contが0以外」以外だったら、つまり0だったらループする。
どういう意味?

245 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 20:28:37 ]
どういう意味もなにも、それ以外の意味は無いんだが…

while ( ! (cont) )

こう書けば分かるかね?論理否定演算子あたりでググってくれ。

246 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 21:15:22 ]
釣られすぎ

247 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 21:20:06 ]
コントです

248 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:02:38 ]
誰がうまい事言えと・・・

249 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:37:50 ]
釣りだったのかよ。付き合って損した。こんなことしてもスレ住人が減るだけなのに。

250 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 14:54:01 ]
型 X と型 Y が signed 付きか unsigned 付きかの違いしかない整数型のとき
X x = A;
Y* y = (Y*)&x;
のあと
(Y)x と *y は同じ結果になりますか?
または ISO/IEC 9899:1990 のどのあたりで分かりますか?


251 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 15:18:35 ]
>signed 付き
>unsigned 付き

252 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 16:13:37 ]
#include <stdio.h>
int main(void)
{
int width,height,i,j;

puts("長方形");
printf("幅はいくつ?:"); scanf("%d",&width);
printf("高さはいくつ?:"); scanf("%d",&height);

for (i=1; i<=height; i++) {
for (j=1; j<=width; j++)
putchar('*');
putchar('\n');
}

return (0);
}
を採点してください。こうしたほうが、スマートだよとか、
速いよ、とかあれば教えてください。

253 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 16:57:42 ]
・scanf()は使わない方がいい。
・個数を回すループは 0 から n 未満とするのが一般的。
・forの中味の行が変わるなら括っておくのが無難。
・一文字変数は避けた方がいい。
・(0)は意味がないので 0 で充分。



254 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 17:04:09 ]
>>252
>>1
> GUIなどの標準Cではできない事の質問、ソース丸投げ、宿題、書籍 は
> 専門の別スレッド↓があるのでそこへさようなら。

255 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 18:35:24 ]
>>253
このようなtoy programなら、scanfを使っていけない理由はない。
ループ制御変数はi,jのように1文字にするのが原則。無駄にcounterのようにすると返って読みにくい。

256 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 18:50:05 ]
>>253の他はどうですか?

257 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 19:15:16 ]
csvファイルを読み込んで構造体に格納するとき、
strtok()とsscanf()では、どちらを使う方がいいですか?
あるいはもっといい方法ありますか?

258 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 20:02:16 ]
>>257
基本的にscanfファミリーはガッチリフォーマットの決まったレコードや
データが空白で区切られたレコードを読むのに最適に出来ている
カンマ区切りの可変長データは、それが全部数値ならいいが、
文字列が混ざってると厄介なことになりやすいので、
そういう場合にはstrtokを使ったほうが楽な場合も多い

あとは具体的なデータの内容によるとしか言えないが、
"str,ing",255, …みたいなものまで読める完全に汎用なものを作りたいなら
strtokでもsscanfでもなく頭っから一文字ずつ読んで解釈するしかない

259 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 20:02:30 ]
#include <stdio.h>
int main(void)
{
int width,height;

puts("長方形");
printf("幅はいくつ?:"); scanf("%d",&width);
printf("高さはいくつ?:"); scanf("%d",&height);

for (int i=0; i<height; i++) {
for (int j=0; j<width; j++) {
putchar('*');
}
putchar('\n');
}

return 0;
}

260 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 20:40:43 ]
>>259
C99だね

261 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 22:23:26 ]
ピラミッドの作り方は、法則があるのですか?
scanf("%d",&n);

for (i=1; i<=n; i++) {
for (j=1; j<n-i+1; j++)
putchar(' ');
for (j=1; j<=(i-1)*2+1; j++)
putchar('*');
putchar('\n');

for (j=1; j<n-i+1; j++)

for (j=1; j<=(i-1)*2+1; j++)
の解説をお願いします。

262 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 22:24:24 ]
>>261
ピラミッドにもいろいろあるので、一概には答えられません。

なんて冗談は兎も角、>1を読んで初心者スレへどうぞ。

263 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 22:26:22 ]
>>262
thx! 移動します



264 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 00:18:10 ]
>>252
そもそも長方形であるためには width>0 && height>0 でないといけないんだから
それをチェックすべきじゃないのか?

265 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 01:35:27 ]
>>250
同じ結果になるとは言えない。
と 6.2.6.2 を読んで思った。

266 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 22:25:05 ]
相互参照するヘッダってどう書けばよいですか。
文字列ライブラリと、エラーラーブラリのヘッダで、
文字列ライブラリでエラーがあったらエラーライブラリの関数、
エラーライブラリ内では文字列ライブラリを使ってます。
頭が再帰でどうにかなりそおです。

267 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 22:26:38 ]
ちなみに
どっちかに自分のプロトタイプを置く方法は使いたくありません。
メンテが面倒なのでね。

268 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:10:53 ]
よく使われるこのイディオムじゃ駄目?

--foo.h
#if !defined FOO_H
#define FOO_H
#include "bar.h"
...(本体)
#endif
--

--bar.h
#if !defined BAR_H
#define BAR_H
#include "foo.h"
...(本体)
#endif
--

269 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:18:55 ]
>>266,267
文面からすると、関数の呼び出しをヘッダ内で行っている(つまり「定義」を書いている)???

通常は、ヘッダには、関数の[宣言のみ]書き、定義は別にするから、
互いに参照し合う必要はないはず。

270 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:41:32 ]
うるさいなー
もー
C++だってインラインで定義してんじゃん
分けるの面倒なの!

271 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 23:44:20 ]
>>268
それじゃダメだっつってんだろ

272 名前:デフォルトの名無しさん [2007/09/29(土) 00:10:39 ]
関数定義がヘッダで行われてるなら、
2つのソースファイルで同じヘッダを読み込んだ時点で
関数の2重定義でリンク通らなくなるだろ。

相互参照云々以前に根本的にバグってる。

273 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:18:55 ]
>>272
ライブラリ使う側からなら何の問題もなし。
バグってるのはお前の頭。



274 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:25:01 ]
>>273
コンパイル出来ない両ライブラリとライブラリを使ってる部分のソース一式どっかにアップするか
日本語勉強し直すか、どっちかにしてくれ。

275 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:26:01 ]
わかんないなら引っ込んでろよ
うぜー







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<146KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef