【ISO/ANSI/JIS】 C言 ..
[2ch|▼Menu]
175:デフォルトの名無しさん
07/09/23 16:25:57
>>172
そうなんですか。前者を使うほうがいいんですね。

176:デフォルトの名無しさん
07/09/23 16:33:04
>>175
いいえ。後者を使うべきです。

177:デフォルトの名無しさん
07/09/23 16:33:33
なんで?

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

179:デフォルトの名無しさん
07/09/23 16:38:43
どっちでもいいだろ

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

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


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

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

184:デフォルトの名無しさん
07/09/23 17:12:06
バージョンくらい書けよ

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

186:デフォルトの名無しさん
07/09/23 17:14:37
Borland C++Compiler 5.5.1
です。

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


188:デフォルトの名無しさん
07/09/23 17:45:33
どういうこと?

189:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/23 18:11:50
>>180
いいえ、後者を使うべき理由ならあります。
宣言以降代入までの不定値が存在する期間を排除することができるというのがそれです。

191:デフォルトの名無しさん
07/09/23 18:21:32
互換性のために前者で書いたほうがいい

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

193:デフォルトの名無しさん
07/09/23 18:29:23
っていうか、俺涙目みたいな・・・

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

195:デフォルトの名無しさん
07/09/23 18:51:24
そんな事言ってる君らはどのコンパイラ使ってるの?

196:デフォルトの名無しさん
07/09/23 18:54:37
Kylix

197:デフォルトの名無しさん
07/09/23 18:59:33
>>189
ありがとうございます。勉強になりました。

198:デフォルトの名無しさん
07/09/23 20:01:38
>>194
私をお呼びですか?フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ

199:デフォルトの名無しさん
07/09/23 20:02:50
>194
代入を禁止したらいい。


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

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


201:デフォルトの名無しさん
07/09/23 20:24:46
関数型言語でおk

202:デフォルトの名無しさん
07/09/23 20:41:26
C++でもSICPの問題がとけるんだからきっとCでも解けるさ

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

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

205:デフォルトの名無しさん
07/09/23 21:31:01
>>204
スレタイに注目。

206:デフォルトの名無しさん
07/09/23 21:46:28
>>204
こいつ最高にアホ。

207:204
07/09/23 21:47:18
>>205 何か問題でも?

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

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

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

211:209
07/09/23 22:47:20
>>210
どうもありがとう。

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

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

213:デフォルトの名無しさん
07/09/24 17:19:46
プログラミングが上達するコツ
スレリンク(tech板)

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

215:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/24 21:59:26
>>215
ありがとう。

217:デフォルトの名無しさん
07/09/25 15:39:42
int sum;
int dig;
とint sum,dig;
とはどう違いますか?

218:デフォルトの名無しさん
07/09/25 15:59:30
違わない

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

220:デフォルトの名無しさん
07/09/25 16:19:40
whileとforはどう使い分けるべきですか?

221:デフォルトの名無しさん
07/09/25 17:04:51
>>219
不可能

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

222:デフォルトの名無しさん
07/09/25 17:05:22
×そんな
○そんな質問

223:デフォルトの名無しさん
07/09/25 18:10:20
そんなあー

224:デフォルトの名無しさん
07/09/25 18:20:56
>>223
>>223
>>223
>>223
>>223

225:デフォルトの名無しさん
07/09/25 21:46:08
>>219
system("sleep

226:デフォルトの名無しさん
07/09/25 21:57:02
");

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


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

229:デフォルトの名無しさん
07/09/26 01:39:47
面白くない

230:デフォルトの名無しさん
07/09/26 01:46:44
>>228
ロジン貸そうか

231:デフォルトの名無しさん
07/09/26 15:21:00
int goto;
int while;
int for;
とかintに関数を使ってもいいですか?

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


233:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/26 15:43:33
>>232
thx!

235:デフォルトの名無しさん
07/09/26 15:44:21
>cnt=+kankaku
ですね。thx!

236:デフォルトの名無しさん
07/09/26 19:11:09
while (!cont)
ってどういう意味?


237:デフォルトの名無しさん
07/09/26 19:16:18
!は以外ってこと
contだけのときは、0
!contは!0ってこと。
だから、0以外

238:デフォルトの名無しさん
07/09/26 19:55:47
>>236はどういう意味ですか?
!contっていう部分です

239:デフォルトの名無しさん
07/09/26 19:58:11
否定ってこと。0のこと。

240:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/26 20:03:21
contの反対ですよ。

242:デフォルトの名無しさん
07/09/26 20:08:26
アホばっか

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

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

245:デフォルトの名無しさん
07/09/26 20:28:37
どういう意味もなにも、それ以外の意味は無いんだが…

while ( ! (cont) )

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

246:デフォルトの名無しさん
07/09/26 21:15:22
釣られすぎ

247:デフォルトの名無しさん
07/09/26 21:20:06
コントです

248:デフォルトの名無しさん
07/09/26 23:02:38
誰がうまい事言えと・・・

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

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


251:デフォルトの名無しさん
07/09/27 15:18:35
>signed 付き
>unsigned 付き

252:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/27 16:57:42
・scanf()は使わない方がいい。
・個数を回すループは 0 から n 未満とするのが一般的。
・forの中味の行が変わるなら括っておくのが無難。
・一文字変数は避けた方がいい。
・(0)は意味がないので 0 で充分。

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

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

256:デフォルトの名無しさん
07/09/27 18:50:05
>>253の他はどうですか?

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

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

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

259:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/27 20:40:43
>>259
C99だね

261:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/27 22:24:24
>>261
ピラミッドにもいろいろあるので、一概には答えられません。

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

263:デフォルトの名無しさん
07/09/27 22:26:22
>>262
thx! 移動します

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

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

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

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

268:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/28 23:18:55
>>266,267
文面からすると、関数の呼び出しをヘッダ内で行っている(つまり「定義」を書いている)???

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

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

271:デフォルトの名無しさん
07/09/28 23:44:20
>>268
それじゃダメだっつってんだろ

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

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

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

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

275:デフォルトの名無しさん
07/09/29 00:26:01
わかんないなら引っ込んでろよ
うぜー


276:デフォルトの名無しさん
07/09/29 00:28:43
自分だってわからないことがあるから質問に来てるんじゃないのか?
そう邪険にするなよ

277:デフォルトの名無しさん
07/09/29 00:29:25
いや、これが正解なんだけど

278:デフォルトの名無しさん
07/09/29 00:29:30
ヘッダに関数定義書くとかクソすぎだろマジで

279:デフォルトの名無しさん
07/09/29 00:29:39
事故解決しました

280:デフォルトの名無しさん
07/09/29 00:37:26
ヘッダ2つの中身を一緒にしちゃえば?
んで、片方は#include1行の適当なヘッダ名でっち上げる。
ソース管理楽だよ。

281:デフォルトの名無しさん
07/09/29 00:42:48
>>280
今まさにそうしてるんだよね
気持ち悪いから変えたかったんだけど
いまのとこそれしか思いつかない
ほんとアホばっかだなここ・・・

282:デフォルトの名無しさん
07/09/29 02:26:20
アホが多いのは否定しない。

283:デフォルトの名無しさん
07/09/29 02:30:16
どんだけバカなんだよ
メンテが面倒だからプロトタイプ書かないとか
気持ち悪いなら他の言語使えば?

284:デフォルトの名無しさん
07/09/29 02:36:14
どう考えても釣りだろう

285:デフォルトの名無しさん
07/09/29 02:54:46
心の底から言ってるんじゃね?
そう考えると哀れみだけしか浮かんでこないので笑ってスルーできるよ。

286:デフォルトの名無しさん
07/09/29 05:58:54
そもそもこのスレで扱う内容なのか?
プロトタイプ宣言と定義が一致しないとエラーになるISO/ANSI/JIS Cはおかしい
K&R時代の仕様に戻すべきだとか?

287:デフォルトの名無しさん
07/09/29 06:37:27
むしろプロトタイプ宣言があれば凡ミスによるバグが減らせて保守が滅茶苦茶楽になるのにね。
機械にやらせられるところは極力機械にやらせるという発想がないやつはプログラマには向いてないな。

288:デフォルトの名無しさん
07/09/29 21:53:36
ファイルをアップロードするCGIをCで作ってます。
バウンダリ文字列で区切られたデータを切り出す際の定跡的な物はありますか??

いまは、
・CRLFCRLFとなった時点をデータの始まり
・すべて書き込んだ後、CRLFまで戻ってそこをデータの終わりとする
って感じでやってます。

289:デフォルトの名無しさん
07/09/29 22:04:13
>>288
Cの言語規約には含まれてはいないので、ご自由にどうぞ。

290:デフォルトの名無しさん
07/09/29 22:51:49
>>289
いや、規約というかテクニックを教えていただけたらと思いまして。。。


291:デフォルトの名無しさん
07/09/29 22:56:33
>>290
スレ違い。

292:デフォルトの名無しさん
07/09/30 00:16:29
議題:このスレの存在意義について

293:デフォルトの名無しさん
07/09/30 00:17:49
もちろん規格の範囲内についてを扱う。
それがなんのことやら理解できないやつが>>292みたいな疑問を持つ。

294:デフォルトの名無しさん
07/09/30 00:20:45
低席(なぜか変換できない)
定石(じょうせき)

295:デフォルトの名無しさん
07/09/30 00:31:52
定石は囲碁用語、定跡は将棋用語。
どちらもよみはじょうせき。

馬鹿の癖に無理に揚げ足とろうとするな

296:デフォルトの名無しさん
07/09/30 01:19:03
将棋なんて知らないもん!

297:デフォルトの名無しさん
07/09/30 08:03:43
288はネットワークプログラミングスレに誘導すればいいのか?

298:デフォルトの名無しさん
07/09/30 12:20:31
>>289>>291

>>288の質問って結局

---------------------hoge

(ここがバイナリデータ部)
---------------------hoge--

ってフォーマットからデータ部を切り出すテクニック、ってことだよ。
これ追い返してたら何も質問できないだろw
ネットワークプログラミングに誘導しても、向こうの住人も困るんじゃないか。
通信関係なら兎も角、タダの文字列処理だもんな。。。

299:デフォルトの名無しさん
07/09/30 12:25:29
>>298
ここは言語テクニックを語るスレでも初心者教習のスレでもありません。
標準Cでの仕様や実装を云々するスレです。
まして「データを切り出す際の定跡」と言った、言語に依存しない抽象概念を扱うスレではありません。

300:デフォルトの名無しさん
07/09/30 12:33:23
>>298
標準Cにおける文字列処理の質問じゃないでしょ。
少なくともhtmlについて殆ど何も知らない私にとって、>288に書かれた以外に
データを切り出す手段があるかどうかなんて見当もつかない。
「こうこうこういうプロトコルで来るデータがある、どう切り出すべきか」というなら
話は別だが、>288を読む限り単なる初心者質問だからこの辺りで充分だろ。
--
C言語なら俺に聞け(入門篇) Part 19
スレリンク(tech板)
スレを勃てるまでもないC/C++の質問はここで 3
スレリンク(tech板)
【初心者歓迎】C/C++室 Ver.43【環境依存OK】
スレリンク(tech板)

301:デフォルトの名無しさん
07/09/30 14:47:35
スレタイトルをそろそろ変えたほうがいいかもしれんね
C規格なら俺に聞け!
とか

302:デフォルトの名無しさん
07/09/30 14:55:20
C規格なら規格書嫁!とか
まあ、「規格」とか「標準」とかって言葉をいれておいた方がいいかもね。

303:デフォルトの名無しさん
07/09/30 14:59:12
ISO/ANSI/JISがそういう意図を含んでいるはずだがね

304:デフォルトの名無しさん
07/09/30 15:00:57
入門者がその意図をくめるはずもなく

305:デフォルトの名無しさん
07/09/30 15:13:30
【ISO/ANSI/JIS以外の】 C言語なら俺に聞け! 【質問お断り!】Part 133

そもそも【】内を真面目に読む人少ないでしょ
>>1も読まれない、合致する質問もほとんど来ない
終了でいいんじゃね

306:デフォルトの名無しさん
07/09/30 15:14:16
>>305
どう考えても字数制限引っかかるだろうが。あほか

307:デフォルトの名無しさん
07/09/30 15:18:49
C言語なら俺に聞け(入門篇) Part 19
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132

上はコード質問可で、下は規約の解釈限定か。なかなか難しいなwww

308:デフォルトの名無しさん
07/09/30 15:20:03
そんなのにマジレスされてもなあ
頭大丈夫?

309:デフォルトの名無しさん
07/09/30 15:20:51
ごめんごめん
>>306の頭のことね

310:デフォルトの名無しさん
07/09/30 15:22:39
C言語規格議論厨隔離スレ
でいいじゃん

311:デフォルトの名無しさん
07/09/30 15:29:56
つーかどう考えても
ISO/ANSI/JIS
これいらないだろ。
取っちゃえよ。

標準Cなら俺に聞け!

テンプレ:
Q標準Cって何?

312:デフォルトの名無しさん
07/09/30 15:32:31
切れちゃった。まあいいや。
>>2の心得とかも必要ない。誤解されるだけ。

313:デフォルトの名無しさん
07/09/30 15:43:43
そりゃそうだな。
そもそも定義にうるさいはずの連中がなんで「C言語」とか「標準C」とか「C」とか
いちいち呼び方変えてるんだよ。
アホか。

314:デフォルトの名無しさん
07/09/30 16:00:31
>>305
>俺に聞け!

>質問お断り!
はねえだろw

315:デフォルトの名無しさん
07/09/30 16:05:12
【A】 B 【C】
とあったら、普通はBが正タイトルでACはサブタイ。ACは繋げて読む事が多い。
AやCに重みがあるスレはネタスレと決まっています。

316:デフォルトの名無しさん
07/09/30 16:10:12
「標準C限定」ってのは、コーディングの際に標準Cを逸脱しないって
意味だと思ってたんだけど、違ってたんだな。
「標準Cそのものに関する質問限定」ってことだったんだねw


317:デフォルトの名無しさん
07/09/30 16:13:35
>>315
ここってネタスレだったんだ
納得ww

318:デフォルトの名無しさん
07/09/30 16:18:29
>>316
フツーに考えて、規約の質問だけでpart132まで行くはずもなく……

いつの間に乗っ取られたんでしょうね。

319:デフォルトの名無しさん
07/09/30 16:19:28
>>316
規約に全く関係ない質問なら、他に質問スレたくさんあるからそっちへ行ってくれればいい

320:デフォルトの名無しさん
07/09/30 16:20:44
>>319

321:デフォルトの名無しさん
07/09/30 16:28:23
初めて家族でF1観戦をしてきたのですが、子供がバスの中でお漏らししてしまい
回りの皆様に迷惑をおかけしました、同乗していた方申し訳ありませんでした

322:デフォルトの名無しさん
07/09/30 16:30:36
>>321
最後のマッサやばかったなw
あれは伝説に残る

323:デフォルトの名無しさん
07/09/30 16:40:04
この流れは>>294を流そうとして必死なのか?

324:デフォルトの名無しさん
07/09/30 16:53:01
ビール 5000ペリカ
カキピー 3000ペリカ
オムツ 20000ペリカ


325:デフォルトの名無しさん
07/10/01 02:13:22
F1弁当 100000ペリカ

326:デフォルトの名無しさん
07/10/01 13:47:11
なぜここでゆでが

327:デフォルトの名無しさん
07/10/01 14:20:03
妙な流れで忘れ去られている >>250 だけど、
非負の値だけの場合
「二つの型において同じ値の表現は同じとする」(6.2.5 型)
負の値も含まれる場合
6.2.6 型の表現 の 6.2.6.2 整数型、により、負の値の表現は
処理系定義となっているので、結果は処理系定義

だと思う

328:デフォルトの名無しさん
07/10/01 21:28:59
6.5.3.2 アドレスおよび間接演算子
正しくない値がポインタに代入されている場合,単項*演算子の動作は,未定義とする。

適合しない型のオブジェクトへのポインタが正しくない値と考えるなら未定義という
こともできないかな?
(83)の注釈にいくつか正しくない値の例があるがこれがすべてだとは言っていないようだ。

329:デフォルトの名無しさん
07/10/09 18:51:48
内容:
作業時間48時間くらいで出来るC言語使った初歩レベルで作れるプログラムない?

都合よすぎかもしれないんだが、1年の節目としてなんか作れと先生に言われてるんだが
いい案がまったく出てこない、そういう例をまとめたサイトとかあれば最高なんだが。

330:デフォルトの名無しさん
07/10/09 18:53:34
ちとコピペミスった申し訳ないorz

内容は時間内に作れれば何でもいいです。

331:デフォルトの名無しさん
07/10/09 18:55:47
echod

332:デフォルトの名無しさん
07/10/09 18:57:58
>>329
学生の1年目なら hit&blow
社会人の1年目なら 住所録(最大件数はメモリの許す限り無制限、10万件程度のデータに対して検索1秒以内)
くらいかな?

333:デフォルトの名無しさん
07/10/09 19:39:45
>>330 >>1 を読め
>>331>>332 スレ違いに反応しない

334:デフォルトの名無しさん
07/10/09 20:52:49
指定されたディレクトリとその下層にあるファイルの中から
指定された名前の関数定義を探し当てるプログラムというのはどうかなッ

335:デフォルトの名無しさん
07/10/09 20:59:58
>>333
申し訳ない。
>>331>>332
ありがとうございます。

336:デフォルトの名無しさん
07/10/09 22:54:24
宿題スレに行って他人の宿題盗ってくれば?

337:デフォルトの名無しさん
07/10/10 00:13:55
後で苦労するのは俺だし授業で時間取ってくれてるからその時間暇になるわ。

338:デフォルトの名無しさん
07/10/11 14:26:34
main()
{
int i;
int a[2][10];

for( i = 0; i < 10; i++ )
{
a[1][i] = i;
a[2][i] = i;
printf("i=%d j=%d\n",a[1][i],a[2][i]);
}
printf("\n");
printf("i=%d j=%d\n",a[1][1],a[2][2]);
}

Visual C++ 2005 Express Edition です。
これをコマンドプロンプトを使ってコンパイルすると、
結果表示後「問題が発生したため・・・」のエラーがでます。
どこかおかしいところはあるでしょうか?

下のprintf文2つは実行確認用です。

339:デフォルトの名無しさん
07/10/11 14:33:04
>>338
>a[2][i] = i;
範囲外


340:デフォルトの名無しさん
07/10/11 14:40:34
「Visual C++ 2005 Express Edition です。」と断らなければいけない
レベルの質問は基本的にはこのスレの対象範囲外

341:デフォルトの名無しさん
07/10/11 20:52:46
まあ内容自体は処理系関係ないがな。

342:デフォルトの名無しさん
07/10/11 20:53:42
だからこそ環境を書く時点でわかってない事の証左

343:デフォルトの名無しさん
07/10/13 13:27:48
fopenで開いているファイルの大きさを切り詰める方法を教えてください。
一時ファイルとして使ってるんですが、自前のデフラグで前に積めた時、
後ろのゴミを消したいので。


344:デフォルトの名無しさん
07/10/13 13:40:08
「C言語」で引っかかるスレで質問できそうなのがここしか見つからないのが問題
限定的な話題扱うならスレタイ自重しろよボケが

345:デフォルトの名無しさん
07/10/13 13:54:09
なら、次スレからJISに合わせて「プログラム言語C」にするか

346:デフォルトの名無しさん
07/10/13 13:55:40
〜なら俺に聞け がよくない。

347:デフォルトの名無しさん
07/10/13 14:19:14
初心者お断りってスレタイで明言すればいいじゃん。きっと過疎って誰も来なくなるよ。

348:デフォルトの名無しさん
07/10/13 14:24:04
C言語なら俺に聞け(入門編)があるのになぜそっちに行かないんだろう

349:デフォルトの名無しさん
07/10/13 14:26:15
>>343
マルチすんな。あっちで回答しておいた。

350:デフォルトの名無しさん
07/10/13 14:26:48
>>347
願ったり叶ったり。

351:デフォルトの名無しさん
07/10/13 14:54:40
>>348
全角厨しか引っかからないな
愛用のかちゅ〜しゃで確認

352:デフォルトの名無しさん
07/10/13 15:10:16
>>351
JaneDoeViewだと引っかかるから気がつかなかったよ
じゃぁこのスレも全角にすれば問題解決だな

353:デフォルトの名無しさん
07/10/13 17:14:58
入門者のくせに「入門」で検索しないのか

354:デフォルトの名無しさん
07/10/13 19:43:13
「入門」で検索って、しないでしょw
言葉使う側のオナニー

355:デフォルトの名無しさん
07/10/13 19:49:16
ほんとスレ立て下手糞だね。
毎回こんな事で揉めるのは双方不愉快になるし時間の無駄。
このスレの存在自体迷惑だし削除した方がマシだよ。


356:デフォルトの名無しさん
07/10/13 21:09:55
お前が立てればいいんじゃね?

357:デフォルトの名無しさん
07/10/13 21:10:16
じゃ、[標準C限定、C++不可、初心者お断り]ってスレタイに明記しとけ。

358:デフォルトの名無しさん
07/10/13 21:13:36
テンプレも読まない連中だから無駄な気もするな

359:デフォルトの名無しさん
07/10/14 22:17:28
>>355
>このスレの存在自体迷惑だし
どんな迷惑を被ったのかkwsk

360:デフォルトの名無しさん
07/10/15 00:44:03
調子こいて答えたら、規格に基づいて袋叩きにされた

361:デフォルトの名無しさん
07/10/15 23:21:44
volatile int v1, v2;
int x = v1 + v2;

これは推奨できないらしいですが、
どういう理由なんでしょうか

どうやらvolatile変数の参照は副作用を持つかららしいのですが、
具体的にどのようなケースがあるのでしょうか


362:デフォルトの名無しさん
07/10/15 23:25:55
>>361
式 v1 + v2 の v1 と v2 のどちらが先に評価されるか不定だから。

363:デフォルトの名無しさん
07/10/15 23:37:50
言葉足らずでした
おっしゃる通り、評価順が不定なのはわかったのですが、

v = f() + g(); みたいなケースは
f()やg()内で副作用のある処理が行われたんだろうな〜
(グローバル変数をいじってるとか)
と想像はつくのですが

volatile変数の場合,
v1とv2が評価順に依存しているケースがあるって事なんでしょうか
その具体例が思い浮かばないです



364:デフォルトの名無しさん
07/10/15 23:40:03
>361

ググりましたが、volatile修飾子はコンパイル時の最適化を抑制する修飾子とのこと
たぶん、排他制御の二重ロックなどの冗長に見える部分の最適化を止めたいのでは?
DOSのシングルスレッドなプログラムしか組んだことないからよくわからないが…

URLリンク(itref.fc2web.com)


365:364
07/10/15 23:41:50
質問の勘違いしてました。御免なさい
 m(_ _)m

366:デフォルトの名無しさん
07/10/15 23:46:52
#include <stdio.h>
#define N 5
int main(void){
int data1[]={1,3,5,7,10};
int data2[]={2,4,6,8,9};
int data3[]=0;
int i = 0;
int j = 0;
if (data1[i] >= data2[j]){
data3[i + j] = data[i];
i++;
}
if (data2[j] > data1[i]){
data3[i + j] = data2[j];
j++;
}
else return 0;
for (i=0;i<N;i++)
printf("%d",data3[i]);
return 0;
}

何がおかしいですか?

367:デフォルトの名無しさん
07/10/15 23:47:42
>>366
int data3[]=0;

368:デフォルトの名無しさん
07/10/16 00:13:38
>>367
どうすればいいですか?

369:デフォルトの名無しさん
07/10/16 00:19:25
>>363
未初期化の変数のロケーションを、必ず、読む、というコードが生成される、はず
規格では未初期化の自動変数を読んだ場合のふるまいはどうだっけ?

実際、どういう場合にまずいかというと
処理系(ここで言う処理系にはOS以下メモリやプロセッサまで含む)によっては
プロセスが、まだ書いたことのないロケーションを読もうとすると、メモリの
ゴミあさり(他のプロセスがパスワードとかを残してたりするの探す)と判断されて
例外で落とされるかもしれない、とか

370:361=363
07/10/16 00:22:31
あぁぁぁすいません
変数は初期済みという前提でおながいします

371:デフォルトの名無しさん
07/10/16 00:23:05
>>368
int data3[N]={0};
他にもおかしいところがあるかもしれないけど見てない

372:デフォルトの名無しさん
07/10/16 00:26:17
>>363
volatileオブジェクトは例えばプロセッサの内蔵タイマのようなリアルタイムに値の変化するものを指しているかもしれない。

373:デフォルトの名無しさん
07/10/16 00:27:16
ありがとうございます。
そこを直してもまだ1つエラーがありました。
data3[i + j] = data[i];
ここらしいです

374:デフォルトの名無しさん
07/10/16 00:27:36
>>363
メモリマップド I/O だな。読んだだけでチップの信号が変わるとか。

375:デフォルトの名無しさん
07/10/16 00:28:33
>>373
エラーメッセージ嫁。
読んで分からなかったらエラーメッセージ添えて聞け。
ここはエスパーごっこするスレじゃない。

376:363
07/10/16 00:29:41
>>372
>>374
なるほど。ハードウェア絡みですね

確かに読むだけでデバイスの状態が変化する可能性がありますね

ありがとうございました!

377:デフォルトの名無しさん
07/10/16 00:31:43
>>375
すみません。
エラー E2451 babble.cpp 10: 未定義のシンボル data(関数 main() )
だそうです。

378:デフォルトの名無しさん
07/10/16 00:34:28
>>377
dataは1〜3だろ、無印は無い
たぶんdata3[i + j] = data1[i];

379:デフォルトの名無しさん
07/10/16 00:38:27
>>377
なんでそこまで言われて気づかないんだ?

380:デフォルトの名無しさん
07/10/16 00:40:35
BCC はこれがコンパイルエラーじゃなくてリンクエラーになるのか。恐ろしいな。
っていうか悪いことは言わないから VC++ 2005 EE か Cygwin GCC にしとけ。

381:デフォルトの名無しさん
07/10/16 00:42:08
いくらBCCでもコンパイル通らないだろ

382:デフォルトの名無しさん
07/10/16 00:43:00
完全な見落としですね…
すみません。ありがとうございました

383:デフォルトの名無しさん
07/10/16 00:58:14
>>371

Cの配列は自動で領域拡張してくれないからdata3のメモリ領域は必ず確保することが必要だと。
data3[] = {0};
だとdata3の配列の長さは1です。今のままだと条件によってはバッファーオーバーランします。


384:デフォルトの名無しさん
07/10/16 01:10:34
たまたま質問が標準C以内のものだったら回答してるって感じだな
>>366なんか標準Cと何の関係もない、ただのデバッグ依頼だろ
ちゃんと切り分けろよ

385:デフォルトの名無しさん
07/10/16 01:10:34
>>383
Nがわざわざ定義してあるだろ

386:デフォルトの名無しさん
07/10/16 01:20:08
>>371
現状の結果は data3[] = {3,*,*,*,*};
となる。*部は未定義かつ異常アクセス。
このデータの場合読み込みしかしていないが
二つのif条件が共に満たされている場合始めの*に書き込み
Windouwsなら共有違反のエラーダイアログが出て強制終了されると思います。



387:デフォルトの名無しさん
07/10/16 01:24:34
突っ込むの面倒だし放置でいいかな?

388:デフォルトの名無しさん
07/10/16 01:27:28
なんでいきなりBCC

389:384=386
07/10/16 21:29:10
一つ見落としてました御免なさい…

390:デフォルトの名無しさん
07/10/23 23:39:29
ぬるぽ

391:デフォルトの名無しさん
07/10/23 23:56:21
ガッ

392:デフォルトの名無しさん
07/10/25 02:01:37
int a = -1;
unsigned int b = a;
こうするとbは標準Cならどんな環境でもUINT_MAXになるんですが

unsigned int b = (unsigned int)a;
こうした場合って、このキャストは
(1)aのビットパターンを無理やり unsigned int として解釈するのか (C++のreinterpret_cast)
→負数の表現が2の補数なら UINT_MAX
 1の補数なら UINT_MAX-1
 絶対値と符号フラグなら…いくつだ?

(2)aをunsigned int に変換するのか (C++のstatic_cast)
→環境によらず UINT_MAX

どっちでしょうか?
あいにく手元には負数の表現方法が2の補数の環境しかないので、確かめられません

393:デフォルトの名無しさん
07/10/25 02:06:39
って、>>189に書いてある説明文に思いっきり
(unsigned int)-1 って書いてあるな…

394:デフォルトの名無しさん
07/10/25 02:16:57
>>392
C の話は解決したとして、 C++ の reinterpret_cast の理解が間違ってる。
reinterpret_cast で int → unsigned int の変換はできない。
reinterpret_cast による変換結果はすべて実装依存。ビットパターン云々とは言えない。

395:デフォルトの名無しさん
07/10/26 12:00:55
>>364 volatile修飾子は、組み込み用プログラムでは多用するな。

    最適化では、値を読むことしかしてない変数は無駄なコードとして
   削除されてしまう。
   
    しかし、メモリマップドI/Oでは、I/Oのレジスタ類は変数として
   定義され、その内容の変化のみをチェックする処理は多い。 その様な
   変数には、volatile修飾子をつけないと最適化で消されてしまって
   処理が実行されない。 Cソース上では存在するが、機械語コードでは
   存在しなくなっている。 これを防止するのが主な使い方だな。


396:デフォルトの名無しさん
07/10/26 14:43:41
>>395
それで思い出したがCPU自体にアトミックな操作ができない物があり、
そういうCPUではvolatileを完全に実現出来ないと聞いた。

具体的には16ビットCPUで32ビット変数を扱うと完全なvolatileには
ならない。16 + 16に分けて2回読み書きするためで、その間に割り込み
が入って内容を変更されてもCPUはそれに気づけない。

397:デフォルトの名無しさん
07/10/26 16:52:48
>>396
>volatileを完全に実現出来ない
それは適当な表現じゃないなぁ。
単にvolatileではアトミックかどうかを意識できないだけの話だと思うんだ。
volatileがそれを保証する修飾子じゃないんだから実現できないってのとは違うでしょ。

398:デフォルトの名無しさん
07/10/26 17:12:01
>>397
§6.7.3.6
An object that has volatile-qualified type may be modified in ways unknown to the
implementation or have other unknown side effects. Therefore any expression referring
to such an object shall be evaluated strictly according to the rules of the abstract machine,
as described in 5.1.2.3. Furthermore, at every sequence point the value last stored in the
object shall agree with that prescribed by the abstract machine, except as modified by
theunknown factors mentioned previously.114) What constitutes an access to an object that
has volatile-qualified type is implementation-defined.

確かに実装依存と書いてあるね。しかしアトミックである事を保証できないのならvolatile修飾子の意味は
無い事になってしまう。規格には保証されてなくても実際volatileをそのような目的に使うなら、CPU固有の
振る舞いを知っておく事は非常に重要なはずだ。

399:デフォルトの名無しさん
07/10/26 17:30:16
主旨には同意するが

> アトミックである事を保証できないのならvolatile修飾子の意味は
> 無い事になってしまう。

これは言い過ぎ。例えば
volatile x;
x = 2;
x = 3;
の x = 2; が実行されることが保証されること等、
アトミシティ以外にも存在する意味はある。

400:デフォルトの名無しさん
07/10/26 17:57:20
ベンチでCPU側にとって無意味なループを省略させないとかかね

401:デフォルトの名無しさん
07/10/26 18:43:50
>>400
保証されない。
xが32bitだとして16bitのCPUなら、上位16ビットを代入した直後に
割り込みが入って上位16ビットを書き換えたらもうダメ。

402:デフォルトの名無しさん
07/10/26 18:44:18
×>>400
>>399

403:デフォルトの名無しさん
07/10/26 21:02:16
アトミックとvolatileは全然違う概念だと俺は信じてたけど…?

>>401
>>399は別に、xに2が設定されることが保障されると
言ってはいないと思う。

404:デフォルトの名無しさん
07/10/26 21:30:30
すると。

int X
X = 1+1;
dly_tsk(100); /* ウエイト */
if(X==2)
これはXは必ずしも真とはいえないのと同じか・・・?(割り込みで値なんていくらでも変更できるので)
volatileは最適化の抑止であって値の保証とは違うと思うが。
それともなんか俺、頭がおかしいのか?

最適化といえば、よくあるのがF-ROMのライトシーケンスやイレースシーケンスとかなんか同じアドレスに0xAAだの0x55だの書くから
最適化されるとうまく動かなくなるね。

ちなみに組み込みをやるとハードがらみで泣かされることがしばしば。
センサ情報で何度泣かされたか。ノイズで何度泣かされたか。静電気で・・・

405:デフォルトの名無しさん
07/10/26 21:31:10
setjmpとallocaって、呼び出しの前後順によってはlongjmpが
おきた時に何か問題おきるかな?

406:デフォルトの名無しさん
07/10/26 23:03:52
自信を持っては言えないのだが、多分volatileがあることで、
(処理系の詳細ではなく仕様で定められたセマンティクスの範囲内でも)
実装可能になる並列データ構造とかは存在するんではなかろうか?

407:デフォルトの名無しさん
07/10/26 23:11:46
ハードの熱で泣かされたことが……

408:デフォルトの名無しさん
07/10/26 23:15:14
>>405をおながいします。
allocaでずれたスタックポインタlongjmpで先祖がえりしてしまうような
ことは無いのか、どうなんでしょう?

409:デフォルトの名無しさん
07/10/26 23:15:59
スタックポインタ「が」longjmp

410:デフォルトの名無しさん
07/10/26 23:24:37
>>401
そんなあなたに sig_atomic_t

411:デフォルトの名無しさん
07/10/26 23:28:54
allocaがなんなのか知ってる?

412:デフォルトの名無しさん
07/10/26 23:33:53
void *p;
int result;

result = setjmp();
if (!result) {
 p = alloca(256);
 hoge(); /* hoge calles longjmp, NO RETURN */
 /* NOT REACHED HERE */
}

/* ここで p の指す先は大丈夫か? */

ということ?

413:デフォルトの名無しさん
07/10/27 00:21:05
>>412
そうそんな感じです。C言語として保証されてるのかな?と
ふと思ったので。

414:デフォルトの名無しさん
07/10/27 00:39:46
allocaは標準Cで既定されている関数ではないから、実装依存としか言いようがない。

415:デフォルトの名無しさん
07/10/27 00:40:12
alloca は C の標準関数じゃないので・・・

416:デフォルトの名無しさん
07/10/27 00:45:12
ああそうなんだ。知らなかったっす。どうもありがとう。

417:デフォルトの名無しさん
07/10/27 01:48:57
>>410
それがはC標準関数ではない
標準ではない型を別途定める必要があること自体C標準ではできないことの証明

418:デフォルトの名無しさん
07/10/27 02:26:56
sig_atomic_t は <signal.h> で定義されてる ANSI C 標準の型ですが何か?

419:デフォルトの名無しさん
07/10/27 02:45:54
関数ではないなw


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5372日前に更新/146 KB
担当:undef