K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[1091] 「体当たり学習」について
投稿者:yuya
2008/02/12 18:06:29

こんにちは。 「C言語体当たり学習徹底入門」を読み返しています。 お手数ですが、いくつか確認させてください。 【1】第1章の本文に「BMI指数」という表現がありますが、 body mass indexの「index」は「指数」なので、 単に「BMI」でいいのではないでしょうか? 【2】p105・List2-8(my_sort5.c)・4行目および p180・List4-2(my_sort6.c)・4行目が #define SCORE_ARRAY_SIZE (100) となっていますが、この「100」を囲む括弧は意図されたものでしょうか? 【3】正誤表 http://kmaebashi.com/taiatari/seigo.html のp102およびp103に言及している箇所で、ともに 「1手順ごとに『ソートずみの範囲』はひとつづつ増えていきます。」 という、全く同じ注釈が付いています。 これは本来p102のほうだけに付けることを意図していた、 という可能性はないでしょうか? 【4】p159・List3-7(my_split.c)・55~57行目の if(out_fp != NULL){ fclose(out_fp); } は、 | 最後に開いた出力ファイルを閉じる。 | ただし入力ファイルが空で、いきなりEOFに出くわして | whileループを一度も回さずに脱出したときだけは、閉じるべき出力ファイルがない。 | このときはout_fpが(10行目の定義によって)NULLに初期化されたままのはず。 | よって、out_fp != NULL のときのみ、クローズ処理を行う。 という解釈でよいのでしょうか? コメントがないと対象読者には分かりにくいような気もしますが……。 【5】p148の本文で、「使い終わったファイルはクローズしておいたほうがよい」とあります。 p158~p159・List3-7(my_split.c)やp168・List3-10(textdump.c)などでは 読み込み用に開いたファイルのクローズ処理が書かれていませんが、別に構わないでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[1089] はじめまして
投稿者:hrkn
2008/02/10 05:37:23

検索から来ました。参考になります!
[この投稿を含むスレッドを表示] [この投稿を削除]
[1088] Re:変数の宣言
投稿者:(ぱ)こと管理人
2008/02/07 03:36:22

>http://www.atmarkit.co.jp/fjava/rensai2/javaent04/javaent04.html >などを読むと、意識すると理解がより深まるのかなぁ、なんて最近思っています。 おおっ、これはっ! 前後を見ると、「制御構造」もやらないうちからいきなりメモリの話かよ、と思うわけで、説明の方法としては(私の感覚では)同意しかねますが、継承を説明するのにメモリ上の配置から入るのは合理的なんじゃないかと私は思っています。私が継承を理解したのは、Cで無理やり継承を実現したXtがきっかけでしたから。 http://kmaebashi.com/programmer/c_yota/inherit.html yuyaさんもおっしゃるように、具体的な方から攻めていかないと理解できないことは多いと思います。私も「人間、誰だって、低レベルな概念の方が理解が早い」とあちこちに書いています。 と思って今Googleしてみたら http://d.hatena.ne.jp/yaneurao/20060511 | 私はもともとコンパイラやそういう低レベルの実装の話が好きだから | そういう勉強の仕方をするのだが、このへんはあまり共感が得られないかも知れない。 あれ? いやまあコンパイラは置いといて、メモリモデルについては、ちょっとプログラミングをかじった人はなんとなく頭にあって、だからこそ、仮想メモリとかを教えるとびっくりする、という認識があったのですが…
[この投稿を含むスレッドを表示] [この投稿を削除]
[1087] Re:変数の宣言
投稿者:yuya
2008/02/06 00:53:43

>大学生に教える機会が多いのですが、何をどの程度教えればよいか、 >こんなことを気に留めながら、試行錯誤しています。 イマサラな意見で恐縮ですが……。 抽象的なことを理解するには、やっぱり具体的なものを ほんの一部でもいいので徹底的に解剖してみて、 そのあとで再び抽象化する、という過程を踏まないと、 きちんと理解できない(少なくとも私は理解した気になれない)と思います。 「木を見て森を見ず」は確かに良くないけれど、 一本も木を見たことのない人がそれを言っても説得力がないなぁ、というところでしょうか。 具体例を経験した後は、こんどはその経験が足枷にならないように 抽象化(文字通り、対象のエッセンスを抽出する)しないといけないのが難しいところですが。 前橋さんの[1085]の解説は、 Cの規格上は必ずしもそのように実装しなければならないわけではない、ということを承知の上で、 あえて一般的な実装(具体例)の詳細にまで踏み込んでいらっしゃる、 という点に、ひげおやじさんは留意しておかれるとよいと思います。 # あ、今年もよろしくお願いします。 > 皆様
[この投稿を含むスレッドを表示] [この投稿を削除]
[1086] Re:変数の宣言
投稿者:ひげおやじ
2008/02/06 00:19:01

たいへん丁寧なご説明ありがとうございます。感謝しております。 未だ「処理系の実装」を想像できるほど物を知っているわけでは ないのですが、理解を深めるのに意識しながら今後勉強して行きたいと 思います。 ちなみに、メモリを意識せずにプログラミングを自力で作成できるように なるのが良いのかもしれませんが、Javaでの継承がメモリモデルを使って 解説してある記事 http://www.atmarkit.co.jp/fjava/rensai2/javaent04/javaent04.html などを読むと、意識すると理解がより深まるのかなぁ、なんて最近思っています。 大学生に教える機会が多いのですが、何をどの程度教えればよいか、 こんなことを気に留めながら、試行錯誤しています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1085] Re:変数の宣言
投稿者:(ぱ)こと管理人
2008/02/04 01:35:25

>>このへんから、 >>・静的型言語 >>・実行時に型を持つ言語 >>・アセンブラみたいな、本当に型のない言語 >>あたりの対比につながると面白いのかな、と思いつつ、 ええと、すみません、そんなたいした話ではないのですが。 たとえばCで、 int a; という(定義を兼ねた)宣言があったとき、これは >(1)変数xの内容を読んだり書いたりするときには、型Tに合った メモリの使い方に従います。 >(2)(1)、かつ、変数xのメモリ領域を型Tに対応するサイズだけ確保する。 この(1), (2)の両方を意味しますが、(1)の意味で効いてくるのはコンパイル時であり、(2)は実行時なんですよね(細かく言えば、staticでないローカル変数なら関数突入時、グローバル変数なら実行開始時)。 もちろんCではintとdoubleとでは普通はサイズが違いますから、「型Tに対応するサイズだけ確保する」ためには型を知らなければならないように思いますが、実際には「intのローカル変数ふたつ」であっても「doubleのローカル変数ひとつ」であっても、実行時の機械語コードは「スタックに領域を8バイト分確保する」となっている(※1)だけで、細かい型までは意識していません。 構造体定義にしても、 typedef struct { double x; double y; } Point; と書いたとして、Cでは、この型定義の情報はコンパイルされた機械語コードには残っていません。Point型の変数pがあったとき、p.yという記述は、「pの先頭アドレスから8バイト(※1)ずれたところを参照する」という機械語コードに変換されるのであって、「メンバyを参照する」ということは実行時には意識していません。 Javaあたりだと微妙に話が違って、リフレクション用にクラスの情報を保持しておく必要はありますし、バイトコード中に「メンバy」という情報は残っていますが、「メンバy」という情報はロード時にオフセット参照に変換されるはずです(JITがなかったとしても)。 静的型言語だとこんな感じですが、型なし言語であるRubyとかcrowbarでは、 a = 10; で変数が宣言されます。JavaScriptなら var a; でしょうか。これはひげおやじさんのおっしゃるところの(2)を、実行時に行っています(※2)。ただし「a = 10;」の実行のあとで「a = "abc";」と書くのも許されます。これは、整数型も文字列型も(変数aのレベルでは)同じサイズで表現されるためです。また、オブジェクトのメンバを参照するためa.yと書いてあったとき、aの型は実行時までわかりません(aにyというメンバがあるかどうかさえも)。よってひげおやじさんがおっしゃるところの(1)は、aという変数が宣言されたさらに後、まさにその変数を使うときに判定されるわけです。 「アセンブラみたいな、本当に型のない言語」は、例としてはたとえば(Cの前身である)Bなんかがそうでしょう。Bでは auto a; で変数が宣言できるようですが(※3)、なにしろBには型がないというか、intとポインタ(アドレス)は同じ型でそれ以外の型はなかったわけですから、「auto a;」は(2)の意味しか持ち得ません。 ……ええと、なんというかあまり面白い話にはならなかった気がしますが、ひげおやじさんもおそらく哲学論議がしたいわけではないと思いますから、ここはひとつ「言語を作ってみる」…とまではいかなくても処理系の実装を想像してみる、というのはいかがでしょうか(と、「プログラミング言語を作る」の宣伝につなげてみる)。 とか言いつつ、静的言語であるDiksamは、いまだにクラス部分が公開できてないわけですが。秋ごろから一応クラスやポリモルフィズムは動いていて、ただいろいろな意味で中身がぐちゃぐちゃで、作業時間が全然(本当に全然)取れないので進んでいないのですが。 ※1)intが4バイト、doubleが8バイトの処理系を想定しています。 ※2)Rubyの変数の宣言は厳密には「代入文が実行されたとき」ではないのですが、ここでは置いておきます。 ※3) http://cm.bell-labs.com/cm/cs/who/dmr/kbman.html
[この投稿を含むスレッドを表示] [この投稿を削除]
[1084] Re:変数の宣言
投稿者:ひげおやじ
2008/02/02 15:56:57

ご返答ありがとうございます。 >なんというか、ご質問は、その指すところが曖昧で、(失礼ながら)初心者がワケわかんなくなった上での質問のように一見すると見えて、「774RRさんいきなりそんな話をされても」とか書くべきかと酔っ払った頭で一瞬思ったのですが。 まさにその初心者で、自分で頭の整理ができなくて質問してしまったようなところです。 結局は、変数の「宣言」と「定義」の違いをきちんと認識するのが不足していた と自分では省みています。(質問にもその認識不足がにじみでていたな、とも。) それだけではないのかもしれませんが・・・。 >ヒントになるかもしれないこととしては、 > >typedef struct { > double x; > double y; >} Point; > >と書いたとき、これだけでは単なる型宣言なのでメモリはまったく確保しませんが、上記(1)で言うところの型Tを定義する意味は持っているわけですよね。 これって、Javaのabstract class や interfaceなどでも同じことが当てはまるんでしょうか。浅はかな知識だけで、この質問も曖昧かもしれなく、すいません。 >このへんから、 >・静的型言語 >・実行時に型を持つ言語 >・アセンブラみたいな、本当に型のない言語 >あたりの対比につながると面白いのかな、と思いつつ、 可能ならば、この続きを教えていただければと存じます、触りだけでも。 宜しくお願い致します。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1083] Re:変数の宣言
投稿者:(ぱ)こと管理人
2008/02/02 05:43:38

どうもです。 >プログラムで、変数を宣言する文は、プログラムを実行した >ときのパソコンのどんな動作に対応するのでしょうか。 なんというか、ご質問は、その指すところが曖昧で、(失礼ながら)初心者がワケわかんなくなった上での質問のように一見すると見えて、「774RRさんいきなりそんな話をされても」とか書くべきかと酔っ払った頭で一瞬思ったのですが。 >(1)変数xの内容を読んだり書いたりするときには、型Tに合った >メモリの使い方に従います。 >(2)(1)、かつ、変数xのメモリ領域を型Tに対応するサイズだけ確保する。 この(1)と(2)は、変数の宣言の二面性をかなり明確に意識しているように思います(だからこそ774RRさんのご回答がこの区分にきっちり一致しているわけで)。 今は酔っ払っているので頭回ってませんが、ヒントになるかもしれないこととしては、 typedef struct { double x; double y; } Point; と書いたとき、これだけでは単なる型宣言なのでメモリはまったく確保しませんが、上記(1)で言うところの型Tを定義する意味は持っているわけですよね。 このへんから、 ・静的型言語 ・実行時に型を持つ言語 ・アセンブラみたいな、本当に型のない言語 あたりの対比につながると面白いのかな、と思いつつ、すみませんもう寝ますおやすみなさい。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1082] Re:変数の宣言
投稿者:774RR
2008/02/01 22:20:46

>また、言語によって違ったりするんでしょうか。 世の中にはプログラミング言語など星の数ほどあるので、違ったりするだろうな それだと答えに困るので、とりあえず C C++ の類に限定すると メモリ という言葉をより広義の「記憶域」と読み替えて (1) Yes (2) 宣言が同時に定義となる場合には Yes 変数は狭義の「メモリ」つまり、俗に言う RAM に置かれるとは限らなくて もっと高速にアクセスできる「レジスタ」に置かれる場合もあるわけだ。 レジスタとメモリ(とその他変数に使えそうなもの)を称して記憶域という (1)(2)のあわせ技から以下のようなバグが発生することがあるので注意だな 「定義にならない宣言」と「定義になる宣言」が矛盾する場合におかしなことになる ---a.c--- extern int wrong_declared_variable; // declaration without definition ... wrong_declared_variable=0; // may destroy other variables ---b.c--- char wrong_declared_variable; // declaration with definition
[この投稿を含むスレッドを表示] [この投稿を削除]
[1081] 変数の宣言
投稿者:ひげおやじ
2008/01/31 20:39:14

お世話になります。 プログラムで、変数を宣言する文は、プログラムを実行した ときのパソコンのどんな動作に対応するのでしょうか。 変数xをある型Tで宣言するのは、次のいずれかなんじゃないかなぁ、 なんて自分では推測しているのですが。 (1)変数xの内容を読んだり書いたりするときには、型Tに合った メモリの使い方に従います。 (2)(1)、かつ、変数xのメモリ領域を型Tに対応するサイズだけ確保する。 (3)(1)、(2)以外。 どれが正解なんでしょう。それとも正解はないんですかね(^_^; また、言語によって違ったりするんでしょうか。 どなたかご教授いただければ幸いです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1079] Re:「ほげほげ認証」てすと
投稿者:(ぱ)こと管理人
2008/01/11 01:16:12

>本日は晴天なり すみません、純粋なテスト投稿であればできるだけテスト用掲示板 http://kmaebashi.com/bbs/list.php?boardid=testbbs の方にお願いします。テスト用掲示板にもほげほげ認証は付いています。 …が、今見てみたら、テスト用掲示板にはspamが来てるじゃないですか! 人間がアルバイトで投稿しているのかなあ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1078] 「ほげほげ認証」てすと
投稿者:
2008/01/10 19:09:28

本日は晴天なり
[この投稿を含むスレッドを表示] [この投稿を削除]
[1077] Re:業務連絡:「ほげほげ認証」を実装しました
投稿者:(ぱ)こと管理人
2008/01/03 09:35:50

>では早速テスト投稿などしてみませう どうも、おひさしぶりです。 # おひさしぶりになってしまったのは掲示板が壊れていたためですね…すみません。 >はたして cgi 君はうまくうごくのであろうか PHPだからcgiではないです、というツッコミはありでしょうか。 ところで、昨日は一晩で14通のspamが来たことを考えると、「ほげほげ認証」は それなりに効果があると思ってよさそうです。もうちょっと続けてみないと なんとも言えませんが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1076] Re:業務連絡:「ほげほげ認証」を実装しました
投稿者:774RR
2008/01/02 18:56:17

では早速テスト投稿などしてみませう はたして cgi 君はうまくうごくのであろうか
[この投稿を含むスレッドを表示] [この投稿を削除]
[1075] 業務連絡:「ほげほげ認証」を実装しました
投稿者:(ぱ)こと管理人
2008/01/02 16:37:11

掲示板を直したところspamがひどいので、 以下のページで紹介されている「ほげほげ認証」を導入しました。 http://diary.noasobi.net/2006/07/diary_060728a.html お手数をおかけしますが、今後投稿する際は、投稿欄の下のテキストボックスに 「ほげほげ」と入力してください。 こんなのは固定パスワードですし、画面に堂々と出るわけですし、 本来であればCAPTCHAか何かを導入すべきかもしれませんが、 ロボット相手ならそれなりに効果があるんじゃないかなあ、ということで 手抜き実装です。 投稿される方にはひと手間増えて申し訳ありませんが、よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1074] Re:あけましておめでとうございます(兼業務連絡)
投稿者:(ぱ)こと管理人
2008/01/02 07:33:44

>max(serialid)に置き換えて修復しました。 > >どうりで長いこと投稿がなかったわけだ… で、直したとたんスパム14連発かよ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1073] あけましておめでとうございます(兼業務連絡)
投稿者:(ぱ)こと管理人
2008/01/01 16:37:06

今年もよろしくお願いいたします。 ……と投稿しようと思ったら、SQLがエラーを吐きました。 スクリプトを見直したら、掲示板ごとの連番を取得するところでcount(*)を使っており、 少し前の広告削除で空き番ができるような物理削除をしていたのでcount(*)で取得した 連番が重複エラーを出していました。センスの悪いSQLを書いてましたね。 max(serialid)に置き換えて修復しました。 どうりで長いこと投稿がなかったわけだ…
[この投稿を含むスレッドを表示] [この投稿を削除]
[1072] Re:ソースコードの単純な誤植
投稿者:(ぱ)こと管理人
2007/10/08 17:32:28

>以下のような文章が出てきます。 >(下2行はいらないでしょうが、一応載せておきますね。) >----- >i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367) >Copyright (C) 2005 Free Software Foundation, Inc. >This is free software; see the source for copying conditions. There is NO >warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 情報ありがとうございます。 うちのUbuntu Linuxの gcc (GCC) 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5) とやらではこの警告は出ないので、4.x系なら出るのかというとそういうわけでも なさそうですね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1069] Re:ソースコードの単純な誤植
投稿者:cocoatomo
2007/10/08 12:03:36

>gcc --versionで表示されるgccのバージョンは何でしょうか? 以下のような文章が出てきます。 (下2行はいらないでしょうが、一応載せておきますね。) ----- i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367) Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -----
[この投稿を含むスレッドを表示] [この投稿を削除]
[1067] Re:ソースコードの単純な誤植
投稿者:(ぱ)こと管理人
2007/10/08 04:08:04

>----- >mycalc.y:64: warning: incompatible implicit declaration of built-in function 'exit' >----- >と警告が出てしまいます。 「of built-in function 'exit'」つまりexit()を組み込み関数とした上で 警告を出してくれるわけですね。 すみません、よろしければ教えていただきたいのですが、 gcc --versionで表示されるgccのバージョンは何でしょうか? うちのMinGW(gcc (GCC) 3.4.2 (mingw-special))ではこの警告は 出ないようです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1065] Re:ソースコードの単純な誤植
投稿者:cocoatomo
2007/10/07 06:42:35

はじめまして。 前回の投稿で挨拶をしていなくて、すみませんでした。 >>8行目 >>"}" → "};" >>"union" の宣言の終わりのセミコロンが無い。 > >これですが、ここはもともとセミコロンは不要ではないでしょうか >(bisonで試したところあってもなくても通りましたが)。 はい、自分のところで試してみたところ、セミコロン無しでも通りました。 エラーメッセージを読み間違えたのだと思います。 >>64行目 >>"exit()" を使用しているのに、"stdlib.h" が include されていない。 > >こちらは修正いたしました。 >gccだとexit()は組み込み関数になっていて、-Wallを付けても、stdlib.hをinclude >していない状態でコンパイルエラーにならなくて… というのは言い訳ですね。 私の環境(MacOSX v10.4.10 Darwin 8.10.1?)で gcc -o mycalc y.tab.c lex.yy.c を実行すると ----- mycalc.y:64: warning: incompatible implicit declaration of built-in function 'exit' ----- と警告が出てしまいます。 なので、一応神経質になって include してみた次第です。 # こういう仔細な状況を書き忘れないようにしようとは思うのですが、 # 忘れてしまいます。すみません。 お早い返信ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1064] Re:ソースコードの単純な誤植
投稿者:(ぱ)こと管理人
2007/10/07 01:26:20

はじめまして。ご報告ありがとうございます。 >8行目 >"}" → "};" >"union" の宣言の終わりのセミコロンが無い。 これですが、ここはもともとセミコロンは不要ではないでしょうか (bisonで試したところあってもなくても通りましたが)。 NUTSHELLの本でも、以下のサンプルでもセミコロンは付いていませんし。 http://www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO-6.html#ss6.3 >64行目 >"exit()" を使用しているのに、"stdlib.h" が include されていない。 こちらは修正いたしました。 gccだとexit()は組み込み関数になっていて、-Wallを付けても、stdlib.hをinclude していない状態でコンパイルエラーにならなくて… というのは言い訳ですね。 実は現在公開しているcrowbarやDikamでも同様の問題があり、最近ようやく -ansiオプションを付けました。次バージョンから修正します。 >私は2行目と3行目の間に "#include <stdlib.h>" という行を挿入したのですが、 >これでいいのでしょうか? それでOKです。 ご報告いただきありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1063] ソースコードの単純な誤植
投稿者:cocoatomo
2007/10/06 02:25:44

リンクされているページのソースコード"mycalc.y"に誤りがありましたので、報告いたします。 8行目 "}" → "};" "union" の宣言の終わりのセミコロンが無い。 64行目 "exit()" を使用しているのに、"stdlib.h" が include されていない。 私は2行目と3行目の間に "#include <stdlib.h>" という行を挿入したのですが、これでいいのでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[1062] 管理者により削除されました
2007/10/04 12:46:19

広告なので削除。 管理者削除がたまってきたのでそろそろDBから物理削除します。
[この投稿を含むスレッドを表示]
[1061] 管理者により削除されました
2007/10/04 12:45:20

意味不明の投稿につき削除
[この投稿を含むスレッドを表示]
[1060] 管理者により削除されました
2007/09/24 04:57:51

エロ系SPAMにつき削除
[この投稿を含むスレッドを表示]
[1059] 管理者により削除されました
2007/09/24 04:57:25

エロ系SPAMにつき削除
[この投稿を含むスレッドを表示]
[1058] 管理者により削除されました
2007/09/19 08:08:21

広告なので削除しました
[この投稿を含むスレッドを表示]
[1056] 管理者により削除されました
2007/09/12 23:12:53

エロ系SPAMだったので削除しました。
[この投稿を含むスレッドを表示]
[1055] Re:externと「外部結合」
投稿者:yuya
2007/09/06 15:20:34

> Rationaleを見ても、このへんに関する記述は以下の箇所くらいのようです。 > http://www.lysator.liu.se/c/rat/c1.html#3-1-2-2 rationaleにこんな記述があったのですね。ありがとうございます。 > extern int i3 = 3; > これも不可解ですが、これはcommonモデルの方を引き継いだのでしょうかね。 該当箇所をよく読んでみると、列挙されたモデルの4つ目にinitializionモデルというのがあり、 「定義になるかどうか」を初期化子の有無だけで判断するものがあったようですね。 さらにその後には、 (訳) >規格で採用されたモデルは、strict ref/defモデルとinitializationモデルの特徴を組み合わせたものとなっている。 >(略) >しかし、外部定義として働くのは、「初期化」あるいは「記憶域クラス指定子のない特定の宣言」のいずれでもよい。 >このような混合アプローチが選択されたのは、さまざまな環境と既存の実装に可能な限り広範囲に適応するためである。 とあります。これを読む限り、 extern int i3 = 3; の挙動はinitializationモデルを引き継いだ可能性もありそうです。 同モデルの説明のところにはexternの扱いは明記されていないので、少し話がずれているかもしれませんが。 有用な資料の箇所を指し示してくださってありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]