トップページ⇒tech
1002コメント346KB

C言語なら俺に聞け 139 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 0b7b-+OgX)2017/02/22(水) 18:55:55.41ID:xeEkzIw00
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

前
http://echo.2ch.net/test/read.cgi/tech/1481372036/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0232デフォルトの名無しさん (ワッチョイ bf85-BkNt)2017/03/10(金) 18:40:21.38ID:JlJm70jl0
>>218
>>173 は別人だよ

でもね、スタックに配列を置くんだったら基本固定長だね、まあ alloca() を使ってみたりするくらいだから自分も首尾一貫はしていないのは認めるけどね

>>173 の指摘はするどいね
>外部入力でリミット切らないとか、
自分もこわくてできないね
0233デフォルトの名無しさん (ワッチョイ bf7b-NGN/)2017/03/10(金) 19:05:25.98ID:1BLND3090
>>231
>>217
VLAがどこに確保されるか確認したくて粘着してたと言い訳するのか?
じゃ、答え合わせが終わったところで、

> VLAのサイズと最大値は全く独立だ
につけてきた言いがかりは撤回するって事だな。
0234デフォルトの名無しさん (ワッチョイ 0719-9O7/)2017/03/10(金) 19:06:34.39ID:YR4SAqR10
俺はリミット切らないぜ〜ワイルドだろ〜
0235デフォルトの名無しさん (ワッチョイ bf7b-NGN/)2017/03/10(金) 19:10:43.67ID:1BLND3090
>>232
allocaは平気で使ってるようだけど、なんでVLAは
> >外部入力でリミット切らないとか、
> 自分もこわくてできないね
これなんだ? 謎
0236デフォルトの名無しさん (ドコグロ MMca-ezmg)2017/03/10(金) 19:32:49.66ID:V/tY9QS2M
>>232
別人ならすまん

> >>173 の指摘はするどいね
> >外部入力でリミット切らないとか、
> 自分もこわくてできないね
これはセキュリティホールの話かね?
そうだと言うならどこがどう危険なのか詳しく説明して欲しいんだが
0237デフォルトの名無しさん (ワッチョイ bf85-BkNt)2017/03/10(金) 19:33:05.83ID:JlJm70jl0
>>235
首尾一貫していないのは認めるよ、でもスタックに何でも乗せまくるのは怖いね
データをスタックに置き、スタックからヒープに移す一連の作業では、データ用の配列は固定長にするね、そこらへんは慎重にやってるよ
alloca のいいところは使い捨てができるところだね

いいたいことは >>231
0238デフォルトの名無しさん (ワッチョイ bf85-BkNt)2017/03/10(金) 19:37:50.00ID:JlJm70jl0
>>236
セキュリティホールも視野にいれているが、直接は関係ないかもしれないね
セキュリティホールは、書いている時点では予想もつかないところがあるから(ミスは事前にはわからない)
自分の能力を考えて、スタックには固定長をあてるようにしているよ
固定長の定数を最低限に振って(N=2 くらい)、それでも正常に動くことを確認したりしてから N=1024 とか 4096 とか適当にわりふっているよ

自分の能力を過信しないことだよ
だから VLA は使わない
0239デフォルトの名無しさん (ドコグロ MMca-ezmg)2017/03/10(金) 19:59:52.49ID:V/tY9QS2M
>>238
もう言ってることがむちゃくちゃだな...

> セキュリティホールも視野にいれているが、直接は関係ないかもしれないね
結局関係あるかどうかも知らないのに
> >>173 の指摘はするどいね
とか言ってたのかよ

> セキュリティホールは、書いている時点では予想もつかないところがあるから(ミスは事前にはわからない)
今の話に関係ないよな

> 自分の能力を考えて、スタックには固定長をあてるようにしているよ
お前の能力なんてどうでもいいし、プログラムの作り方もどうでもいい(部下がやってたら張り倒すけど)

> 自分の能力を過信しないことだよ
鏡を見た方がいいぞ

> だから VLA は使わない
これもどうでもいい結論だな
0240デフォルトの名無しさん (JP 0H1f-busz)2017/03/10(金) 20:00:22.53ID:cy2JzExTH
allocaは使うのに?
0241デフォルトの名無しさん (フリッテル MM0e-X9Oq)2017/03/10(金) 20:06:19.22ID:Y9Psq7+lM
1関数でスタッフを使っていいのはせいぜいキロバイトオーダーまで
メガバイト以上はヒープ推薦
0242デフォルトの名無しさん (ワッチョイ 0719-9O7/)2017/03/10(金) 20:06:51.85ID:YR4SAqR10
VLAは政府の陰謀だから使っては駄目だ
0243デフォルトの名無しさん (ワッチョイ f217-csvI)2017/03/10(金) 20:44:24.96ID:n8W4k0Sb0
Windowsのカーネルモードは12KBのスタックサイズ制限があるので、ひとつの関数で数KBスタックを使うのはかなり贅沢。
0244 ◆QZaw55cn4c (ワッチョイ be13-H6F/)2017/03/10(金) 20:45:49.50ID:Jt0Ka4fq0
>>240
まあ,そうだね
0245デフォルトの名無しさん (ワッチョイ bf7b-NGN/)2017/03/10(金) 21:57:09.32ID:1BLND3090
>>238
非標準ライブラリのallocaは使うのにVLAを使わない理由はなんだ
逃げてないで答えろよ
0246デフォルトの名無しさん (ワッチョイ bf7b-NGN/)2017/03/10(金) 21:59:24.00ID:1BLND3090
>>238
非標準ライブラリのallocaはセキュリティ上問題ない(だから使う)として
一方でVLAはセキュリティ上問題あるとしている根拠を述べよ
0247デフォルトの名無しさん (ワッチョイ 723c-T4+7)2017/03/11(土) 00:59:17.54ID:99Bu6VN70
VLAって本当になんであるんだろうな。
ソフトウェアの脆弱性を誘発するためにNSAやアメリカ政府が無理やりぶち込んだ仕様としか思えない。
0248デフォルトの名無しさん (ブーイモ MM92-busz)2017/03/11(土) 01:24:57.09ID:37V8Z39XM
>>247
どんな脆弱性?
0249デフォルトの名無しさん (ワッチョイ cfd4-nt29)2017/03/11(土) 01:44:41.71ID:o4rVijF20
>>241
スタックサイズ拡張したらダメなの?
0250デフォルトの名無しさん (ドコグロ MMca-ezmg)2017/03/11(土) 05:56:56.37ID:0cGmXZ4gM
>>247
> NSAやアメリカ政府が無理やりぶち込んだ仕様としか思えない。
基地害の妄想
0251デフォルトの名無しさん (ドコグロ MMca-ezmg)2017/03/11(土) 05:58:26.88ID:0cGmXZ4gM
>>249
>>243 みたいに拡張できないケースは少なくない
0252デフォルトの名無しさん (ワッチョイ f338-9O7/)2017/03/11(土) 08:06:11.09ID:zScGv76W0
https://www.youtube.com/watch?v=56-ktABNiR4
C言語マスターの生放送開始 お前らに指南してやんよ
0253デフォルトの名無しさん (ワッチョイ 0742-2hGO)2017/03/11(土) 09:07:47.31ID:qsNY6D990
wikipedia

VLA
超大型干渉電波望遠鏡群(Very Large Array,VLA)
軽量飛行機 (Very Light Aircraft) - 欧州における航空機分類の一つ
垂直発射アスロックミサイル(Vector Launch ASROC)
ボランティア法律家による芸術支援団体(Volunteer Lawyers for the Arts,VLA)
ヴィオラ (Viola) の略称 (vla, va) - ヴァイオリン族の弦楽器

陰謀だな
まちがいない
0254デフォルトの名無しさん (ワッチョイ fe81-1sZU)2017/03/11(土) 12:50:26.01ID:hyZtRr/u0
C#なら一行で終わる内容をCは20〜30行必要w
老い先短いジジイどもは死ぬまでCで書いてろwww
0255デフォルトの名無しさん (ワッチョイ be41-/tS9)2017/03/11(土) 13:11:24.12ID:awln0KGk0
>>254
なんでC#は一行で済むと思う?
0256 ◆QZaw55cn4c (ワッチョイ bf85-BkNt)2017/03/11(土) 15:26:38.47ID:sAcoRj840
>>239
お前は自分の論理を信用しすぎる
つhttps://en.wikipedia.org/wiki/Godel%27s_incompleteness_theorems

>>173
の指摘は鋭いと思うよ、外部入力でリミットを切らないのは悪手の典型だ
繰り返していっておくが、セキュリティホールは事前には書いている本人にもわからない
だから定石を信用して事を始めたほうが悪い結果がやってこない場合が多い
スタックあふれは発生してはじめてわかる、リンかのオプションを指定しても根本的解決にならない
毎月の windows update が一向に減らない理由も考慮しておいたほうがいい

C99 の可変長配列は、安易にスタックを大盛りにする悪手に誘導するという点で、筋悪だと主張している
(でも私は alloca は使うけどね :-)
0257デフォルトの名無しさん (ワッチョイ bf85-BkNt)2017/03/11(土) 15:27:36.34ID:sAcoRj840
>>246
alloca はスタック上に展開することがはっきりしているからね、でも C99 の VLA は実装上の指定は規定にはないのでは?
0258デフォルトの名無しさん (ブーイモ MM2b-busz)2017/03/11(土) 15:36:12.19ID:VKYuFzhGM
なんでスタック上にあることが確実なら安全になるの?
0259デフォルトの名無しさん (ワッチョイ bf7b-WeoV)2017/03/11(土) 15:40:27.05ID:fayNaA1W0
>>256
逃げずに答えろ

非標準ライブラリのallocaはセキュリティ上問題ない(だから使う)として
その一方でVLAはセキュリティ上問題あるとしている根拠を述べよ
0260デフォルトの名無しさん (ワッチョイ 0719-9O7/)2017/03/11(土) 16:03:26.08ID:+8AcHZCs0
VLAはallocaのシンタックスシュガーだろシンタックスシュガーに
よってarray[size]のsizeがマクロか変数か気にしなくてよくなった。
きにしなくなるということは考えなくなるということだから
何も考えず配列を手軽に使えなくなったということだよ。
0261デフォルトの名無しさん (ワッチョイ 723c-ezmg)2017/03/11(土) 16:06:18.87ID:d5jme4tX0
>>256
前半は VLA 固有の話じゃないよな

> C99 の可変長配列は、安易にスタックを大盛りにする悪手に誘導するという点で、筋悪だと主張している
根拠のない主張はチラ裏にでも書いとけ
0262 ◆QZaw55cn4c (ワッチョイ be13-H6F/)2017/03/11(土) 16:09:24.59ID:7UjqbkJQ0
>>260
>VLAはallocaのシンタックスシュガーだろ
規格には書いていないけれども,まあ同意するね >>213
でも,スタック大盛りに誘導するのは筋悪だろう?

>>259
alloca() にセキュリティ上の問題がないとは主張していないよ
setjmp()/longjmp() と同じで,悪い使い方をすれば,当然バグる
0263デフォルトの名無しさん (JP 0H1f-busz)2017/03/11(土) 16:12:09.28ID:bM520vnYH
allocaはスタック大盛りに誘導しないの?
0264 ◆QZaw55cn4c (ワッチョイ be13-H6F/)2017/03/11(土) 16:15:28.58ID:7UjqbkJQ0
もともとのお題は >>87 >>134 >>135 >>139 で,
最終的な回答は >>231 だよ,セキュリティの話は派生的な話題で,正直どうでもいい
0265デフォルトの名無しさん (ワッチョイ 0719-9O7/)2017/03/11(土) 16:22:03.96ID:+8AcHZCs0
[]のなかが数字のときはもはやVLAの特別な場合になってしまったんだよ。
VLAを使わないないと思っても実はみんな使ってるんだよな。
0266デフォルトの名無しさん (ワッチョイ 725b-Zg/o)2017/03/11(土) 16:22:22.50ID:m3w8ys+M0
>>264
もう相手にしなさんな。
複数の端末を使い出してるしよ
0267デフォルトの名無しさん (ワッチョイ bf7b-NGN/)2017/03/11(土) 16:35:26.69ID:fayNaA1W0
>>264
allocaを使って、VLAは筋悪といった理由は全然示してないな。
逃げずに答えろ。

> 最終的な回答は >>231 だよ,セキュリティの話は派生的な話題で,正直どうでもいい
じゃ
> VLA はセキュリティの穴になりうるね,実行時の値で配列の上限が決まるなんて危険な発想ではないかい?
> そんなものを標準に入れていいのか?
これは知ったかぶりしましたってことだな。
0268デフォルトの名無しさん (ワッチョイ bf7b-NGN/)2017/03/11(土) 16:39:36.88ID:fayNaA1W0
>>260
> VLAはallocaのシンタックスシュガーだろ
全然違う1000年ROMってろ

for() {
char *p = alloca(size);
}

for() {
char p[size];
}
0269デフォルトの名無しさん (ワッチョイ 723c-ezmg)2017/03/11(土) 16:51:56.73ID:d5jme4tX0
>>264
> セキュリティの話は派生的な話題で,正直どうでもいい
じゃあ絶賛していたこれは撤回でいいんだよね
> しかも外部入力でリミット切らないとか、セキュリティホールの典型じゃね?
0270デフォルトの名無しさん (ワッチョイ ef6f-/mQW)2017/03/11(土) 18:41:42.10ID:p1f1fsAr0
allocaで取った領域はブロックの終わりじゃなく、関数の終わりまで開放されない
VLAはブロックの終わりで開放されるところが違う

というかallocaの落とし穴みたいな話だね、これは
0271デフォルトの名無しさん (ワッチョイ bf7b-NGN/)2017/03/12(日) 09:00:20.57ID:lxzttZnn0
> というかallocaの落とし穴みたいな話だね、これは
C++脳の落とし穴だよ
単なるライブラリ関数が返したポインタをスコープ抜けただけで解放できるわけないじゃん
0272デフォルトの名無しさん (ワッチョイ db7b-IJma)2017/03/12(日) 14:21:13.54ID:dQxGFGsK0
Cのコンパイルで詰まっています。

vimで表示した時にカッコが赤くなるのは何でなんでしょうか?
http://i.imgur.com/n84ewum.png
カッコの対応はちゃんとやってると思います。。。

またこのソースをコンパイルしたときに
http://i.imgur.com/XIX3aCv.png
というエラーメッセージが出ますが、これもこの部分を変えていないのに
突然エラーが出始めました。
何度見てもここの表記は間違っていません、というか変えていないので間違ってるわけありません。

これで今日の朝からずっと止まっているのですが、、、
原因が分かる方いますでしょうか?
0273デフォルトの名無しさん (ワッチョイ bf7b-WeoV)2017/03/12(日) 14:24:07.85ID:lxzttZnn0
main( ←これが閉じていない
0274デフォルトの名無しさん (エムゾネ FF92-mCUX)2017/03/12(日) 14:24:47.88ID:CrU6WH4/F
( と {
0275デフォルトの名無しさん (ワッチョイ db7b-oWlJ)2017/03/12(日) 14:25:47.72ID:dQxGFGsK0
ありがとうございます死んで来ます
いつ消えたんだ…
0276デフォルトの名無しさん (ワッチョイ 0742-csvI)2017/03/12(日) 15:15:20.20ID:IXx0ivIZ0
生きるんだ!
0277デフォルトの名無しさん (アウアウカー Sa7f-K8Mp)2017/03/12(日) 16:58:28.23ID:Fl2HPIwQa
か、可愛いw
キモいレスバにフレッシュなコメ
0278デフォルトの名無しさん (フリッテル MM0e-X9Oq)2017/03/13(月) 12:35:01.26ID:WVfxmOF7M
この程度のタイプミスぐらい自分で見つけられんようじゃ
先が厳しいんじゃないか
C言語に関係なく
0279デフォルトの名無しさん (スップ Sd92-oWlJ)2017/03/13(月) 14:36:21.34ID:dPy5EX8Fd
タイプミスを見つけれるかどうかは
エディタとエラーメッセージの優秀さによるという持論
0280デフォルトの名無しさん (フリッテル MM0e-X9Oq)2017/03/13(月) 16:10:47.81ID:v3XqhUuXM
これだけ赤く指摘してくれててまだそういうこと言えちゃうとは
人間の欲は天井知らずだな
0281デフォルトの名無しさん (ワッチョイ 13f2-jJqA)2017/03/13(月) 16:55:25.56ID:tV/WpGXC0
与えた入力に対して期待値と異なる出力となったとき
何が起きているか洞察をする専門職のくせに
コンパイラだけが何か特別なデバイスであるかのように思い込んでいるアフォだね
0282デフォルトの名無しさん (ワッチョイ efb5-j8zu)2017/03/13(月) 17:25:35.83ID:6TfSzvFh0
つかエラーメッセージに答えがあるじゃん
0283デフォルトの名無しさん (ワッチョイ e3dc-XjEB)2017/03/13(月) 17:57:51.98ID:IkDDkkqX0
49行の開き括弧か86行の閉じ括弧に色が付けば
もっとエラー位置が分かりやすいとは思うけどね。

main(
の内側に書ける要素がvimの文法チェック情報に登録されていて、
それに合致しない部分が指摘される、という仕掛けかな。
0284デフォルトの名無しさん (スップ Sd92-oWlJ)2017/03/13(月) 18:42:23.61ID:dPy5EX8Fd
>>283
言いたかったのはそういうことです
もう少しピンポイントにエラーメッセージ出せそうな気がするのですが
なかなかそうもいかないものなのだろうか
0285デフォルトの名無しさん (ドコグロ MMca-pmxy)2017/03/13(月) 18:47:33.49ID:DDChi3YkM
コンパイラがそれを指摘してるのに。
0286デフォルトの名無しさん (アウアウカー Sa7f-K8Mp)2017/03/13(月) 20:33:47.62ID:RNfJ73Ada
初心者だから許してやれよw
分かんなくて聞く人も周りにいなかったんだろ
0287toya (ワッチョイ a37b-u6wT)2017/03/16(木) 20:49:48.72ID:yxjuKDF10
C言語の教科書をwikibookで執筆してみました。
標準ライブラリ以外だいたい書き終えました。
よろしかったら加筆・修正などお願いいたします。
https://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E

「C言語」でググると10番目あたりに表示されます。
標準ライブラリも完成させたらもう少し上がるだろうか。
0288デフォルトの名無しさん (ワッチョイ 5319-v8EU)2017/03/17(金) 08:58:22.22ID:Wd4E8hAa0
mallocは昔はchar*ポインターを返していたから言ったけれど
今はvoid*だから必要ないよ。
情報古すぎない?
どんな大昔の本を参考にしているんだ?
0289デフォルトの名無しさん (ワッチョイ 73d4-9jmm)2017/03/17(金) 09:01:26.88ID:ft8i32zD0
最初に「まず、これを読め」と記述しておいて。
あとは、補足事項があれば追記していく形式の方がいいかな。

C89/C90: http://read.pudn.com/downloads133/doc/565041/ANSI_ISO%2B9899-1990%2B[1].pdf
C99: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
C11: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

ルールに加えて、解説やサンプルコードなんかを付けて教科書にしようとしたら、
上記のPDFの数倍の分量になってしまう。
0290デフォルトの名無しさん (ブーイモ MMdf-2dGQ)2017/03/17(金) 09:16:22.96ID:f1lK9slqM
手を動かして書いたことには敬意を表すし
自分は口先だけで申し訳ないんだが
せっかく書くならターゲット読者をもっとはっきり想定すべきかな
プログラミング自体の初心者はこれでは読んでもわからない
Cの初心者向けとしても、コード見ろと突き放さずに、コード解説を増やす、
図を豊富につける、練習問題と解答例ページをつけるとか
0291デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)2017/03/17(金) 10:23:44.22ID:AO+9LJwo0
>>287
「配列とポインタ」という節がでたらめもいいとこ。
初心者が勝手に思い込む誤解をそのまま書いてあるぞ。
編集するならまっさらから書き直しが必要だ。
0292デフォルトの名無しさん (JP 0H57-2dGQ)2017/03/17(金) 10:59:28.61ID:oAih26uCH
>>291
批判はもっと具体的に
0293デフォルトの名無しさん (JP 0Hdf-tpgq)2017/03/17(金) 11:02:37.17ID:sIrFKA5vH
char str1[] = "hello";
P1 = str1 + strlen(str1) - 1;
末尾を指すて書いてあるんですけど
最初のstr1は、どうして必要なんですか?
0294デフォルトの名無しさん (ワッチョイ 4385-RUHq)2017/03/17(金) 11:05:17.08ID:IUwDlrSU0
最初しか読んでないけどまずこれが違う
「配列の識別子」と「&配列の識別子[0]」は同じ
0295デフォルトの名無しさん (ワンミングク MM5f-qjY6)2017/03/17(金) 11:15:06.58ID:sdsUxTdsM
>>293
strlen はオフセットだからベースアドレスを指定している
0296デフォルトの名無しさん (JP 0Hdf-tpgq)2017/03/17(金) 11:41:08.46ID:sIrFKA5vH
>>295
ありがとうございます
0297デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)2017/03/17(金) 12:02:47.24ID:AO+9LJwo0
>>292
最後の一行で「具体的に」言ってるんだが
0298デフォルトの名無しさん (JP 0H57-2dGQ)2017/03/17(金) 12:15:35.09ID:oAih26uCH
>>297
それただのパワハラ上司と同じ
0299デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)2017/03/17(金) 12:20:56.72ID:AO+9LJwo0
>>298
それただの使えない社員と同じ

逆に聞くがあれの全部を書き直さないとして
どこを残すべきだと思っている?
0300デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)2017/03/17(金) 12:25:14.65ID:AO+9LJwo0
「配列とポインタの基本」と称する節でもう「配列の識別子と&配列の識別子[0]は同じ」なんて大ウソこいてるし
「1次元配列を指すポインタ」は配列ではなく単体を指すポインタの説明しかしていない
「多次元配列を指すポインタ」に多次元配列を指すポインタが全く出てこない
0301デフォルトの名無しさん (JP 0H57-2dGQ)2017/03/17(金) 12:33:20.85ID:oAih26uCH
>>300
おう、これを、具体的な批判というのだよ
0302デフォルトの名無しさん (アウアウウー Sa37-Rmg3)2017/03/17(金) 12:37:20.54ID:zqIC+zida
ポインタまで書きたいならCには多次元配列なんて存在しないことも書いとかないと学習者はわけわかんなくならない?
0303デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)2017/03/17(金) 12:49:42.29ID:AO+9LJwo0
>>302
じゃあ int (*pa)[3][4]; は何を指すポインタと言うべきかね?
0304デフォルトの名無しさん (ワッチョイ 5319-v8EU)2017/03/17(金) 12:57:25.64ID:Wd4E8hAa0
間違った情報を載せるということは載せないほうがましだということがわかってないね
0305デフォルトの名無しさん (ドコグロ MMb7-yrln)2017/03/17(金) 13:19:26.79ID:MT1dI4q4M
wikibookはC89前提なんでしょ。書いてないけどそんな感じがする

それでもint main()なのに返り値を返さないのは気になる
(関数の章で返却値の説明でもそうなのはどうかと)

「文字と文字列」はわりとひどい。1バイト=半角文字じゃないし、
unicode に半角文字は無いと思いこんでるようだし。
90年代に独学でパソコン上でCを勉強した人のメモにみえる
0306デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)2017/03/17(金) 13:31:01.59ID:AO+9LJwo0
C89なら2.1.2.2 Hosted environmentでIf the main function executes a return that specifies no value, the termination status returned to the host environment is undefined.って書いてあるからmainにreturnがないのはNGだね。

C99では5.1.2.2.3 プログラム終了処理で「main 関数を終了する}に到達した場合,main 関数は,値0 を返す」となっているからmainのreturnなしはOK。
0307デフォルトの名無しさん (ワッチョイ 3fdf-8FG5)2017/03/17(金) 13:39:02.86ID:AO+9LJwo0
> int i, *pi=NULL;
> *pi=1;//必ずエラーになる。

未定義に「必ず」はねえんだよヴォケ
0308デフォルトの名無しさん (JP 0Hdf-tpgq)2017/03/17(金) 15:20:45.47ID:CLjQ7KbNH
while((ch = fgetc(fp) != EOF)
ferrorとEOFでエラーかそうでないか調べてるだろ?
feofってなんの意味があるの?
0309デフォルトの名無しさん (JP 0Hdf-tpgq)2017/03/17(金) 15:37:30.17ID:CLjQ7KbNH
本読んでたら自決しました
0310デフォルトの名無しさん (ワッチョイ f37b-QFag)2017/03/17(金) 15:57:15.05ID:XponhHf70
はやまるなよ
0311デフォルトの名無しさん (ワッチョイ f3e8-2k4t)2017/03/17(金) 17:29:22.78ID:QOMjQWO00
なんか文学っぽいね。
寺山修司と三島由紀夫を合わせた感じ。
0312toya (ワッチョイ a37b-u6wT)2017/03/17(金) 20:54:03.91ID:hFAn1F6/0
>>300
「C言語/配列とポインタ」のページに関しては自分は正しいと思っていたので、
現在確認中です。とりあえず、テンプレート:正確性を付けておきました。

>>305
「C言語/文字と文字列」のページに、制御文字についても追記しました。

>>307
「C言語/ポインタ#NULLポインタ」の節について修正しました。
0313デフォルトの名無しさん (アウアウウー Sa37-Rmg3)2017/03/17(金) 21:02:08.87ID:/pGD2dIka
>>303
intの配列(要素数4)を一つの要素とする配列(要素数3)へのポインタでしょ
ただの配列の配列を多次元配列と呼ぶのは違うでしょう
0314デフォルトの名無しさん (ワッチョイ bfda-8FG5)2017/03/17(金) 21:08:39.12ID:sgxnbWig0
> NULLポインタにアクセスした場合、OSがエラーを発生する場合もあるが、

ねえよヴォケ
int *pi;
pi = NULL;
printf("%p", pi); //エラーは生じない。生じるとしたらpanic状態だけ
0315toya (ワッチョイ a37b-u6wT)2017/03/17(金) 21:17:55.46ID:hFAn1F6/0
>>314
元の本では「OSが異常を検知して即座にプログラムを停止させてくれる」と書いていたのですが、
これを「OSがエラーを発生する場合もあるが」と記述したのは誤りなのでしょうか?
0316デフォルトの名無しさん (ワンミングク MM5f-qjY6)2017/03/17(金) 21:25:57.94ID:sdsUxTdsM
OS/9 68000とか実記憶系だと暴走するな
0317デフォルトの名無しさん (ワッチョイ bfda-8FG5)2017/03/17(金) 21:31:52.99ID:sgxnbWig0
>>315
誤りだよ、真っ黒、弁明の余地はまったくない
つーか、おまえやってみろよ
どこの世界であのコードをエラーにできるOSを見つけられたのか
読者が知りたいのはそこなんだよ
「元の本」なんか読者も読めばわかるんだよ
おまえの経験値を提供しろ、それ以外にあのサイトの存在意義は何だ?
0318デフォルトの名無しさん (ワッチョイ 337b-7mwY)2017/03/17(金) 21:50:59.67ID:8kMzXY9p0
>>314
未定義なんだからどんな動作しても不思議じゃない
それが「OSがエラーを発生する」という動作なだけだな
0319デフォルトの名無しさん (ワッチョイ bf5b-2PX+)2017/03/17(金) 21:54:22.50ID:9Couem/D0
AS400では確かエラーが出てた気がする。
ともかくウインドウズでは理解できんよ

ATMも壊した記憶がある。
0320デフォルトの名無しさん (ワッチョイ bfda-8FG5)2017/03/17(金) 21:54:27.04ID:sgxnbWig0
>>318
314のどこに未定義があんだよ
おまえ頭湧いてんのか??
0321toya (ワッチョイ a37b-u6wT)2017/03/17(金) 22:02:07.25ID:hFAn1F6/0
>>317

// HelloWorld.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <stdio.h>

int main(void)
{
int i, *pi = NULL;
*pi = 1;//必ずエラーになる。
}

「Windows 10 Pro」、「Visual C++ 2015」で、
上のプログラムを実行すると、
「HelloWorld.exeは動作を停止しました
問題が発生したため、プログラムが正しく動作しなくなりました。プログラム
は閉じられ、解決策がある場合はWindowsから通知されます。」
と表示されプログラムが終了しますが、
これはエラーメッセージとは呼ばないのでしょうか?
0322デフォルトの名無しさん (ワッチョイ bf9f-spnv)2017/03/17(金) 22:14:02.68ID:Wd9/xPhT0
>>321
それはNULLポインタにアクセスしただけじゃなく
NULLポインタの指し示す領域にアクセスしようとしたからでは
0323デフォルトの名無しさん (ワッチョイ cf42-u6wT)2017/03/17(金) 22:20:21.45ID:uumdUn730
>>314
pi = NULL;
printf("%p", pi);

これでエラーを生じさせるのは難しいな
0324デフォルトの名無しさん (JP 0H77-Odst)2017/03/17(金) 22:26:08.25ID:aH9iGnt2H
windowsでコンソールなしならコケるよ
0325デフォルトの名無しさん (ワッチョイ bf17-u6wT)2017/03/17(金) 22:27:09.66ID:q3WLQEZV0
>>323
それ変数の中身見てるだけでアクセスしてないじゃん
アクセスされるには*piにしないと
0326デフォルトの名無しさん (ワッチョイ 337b-7mwY)2017/03/17(金) 22:32:57.53ID:8kMzXY9p0
>>320
NULLポインタにアクセスとは、普通NULLポインタをデリファレンスする事だが
>>314の後半の��コードは知らん
0327デフォルトの名無しさん (ワッチョイ bf25-8FG5)2017/03/18(土) 07:46:26.17ID:BHNX1/aY0
>>321
最初に言っただろ「未定義に必ずはない」と
もう忘れたのか?

いいか、WindowsのSTOPダイアログはCの仕様じゃねえぞ
CではあくまでNULLを逆参照したら未定義の動作つってるだけだ
未定義の動作とは禁止に違反した場合にどのような保証もないことをいう

*** おまえの間違いは「必ず」という文言を入れたことだ ***

そしてその間違いに対する言い訳でもう1つ誤りを犯している
Cを教えるはずが論点がWindowsになってしまったことだ
0328デフォルトの名無しさん (ワッチョイ 03fd-12+v)2017/03/18(土) 07:49:39.12ID:HdcIx2lR0
アドレス0x0000に意味のあるデータがあってもC言語だとアクセス出来ないの?
0329デフォルトの名無しさん (ワッチョイ 733c-tpgq)2017/03/18(土) 07:58:49.65ID:+rfyF7Rl0
いにしえの割り込みハンドラ・・・
0330デフォルトの名無しさん (ワッチョイ bf25-8FG5)2017/03/18(土) 08:10:46.63ID:BHNX1/aY0
>>328
Cでは有効なオブジェクトは決して0x0000番地を含まない
もし0x0000番地を有効なオブジェクトに使うならば
それはもはやCではない、Cライクな別の言語だ
0331デフォルトの名無しさん (ワッチョイ a351-tpgq)2017/03/18(土) 09:07:41.55ID:87n2zRpL0
べつに、規格上の未定義動作に処理系が動作を定義することが禁止されているわけでもあるまい。
実際にVCがそう定義しているかどうかは知らんが、定義しているならその環境で「必ず」と言って
いいわけだし、一般論として「OSがエラーを出す場合もある」ってのも正しい。
■ このスレッドは過去ログ倉庫に格納されています