C言語でexternは不要と主張するQz 大きな釣り針に釣り上げられる。
釣り上げられる際に暴れて大爆死 WWWW
それでは爆笑ログをどーぞ
以下は、http://toro.2ch.net/test/read.cgi/tech/1371208925/から引用
- 261 :◆QZaw55cn4c 2013/06/25(火) 21:34:56.45
- >>260
こっちからはなにかよくわかっていませんが、持ちネタの「仮定義」tentative defenision のよーな木が
extern は要らない子っ!!!!
- 266 :デフォルトの名無しさん 2013/06/26(水) 00:14:02.45
- >>261
そりゃ業務で分割コンパイルも経験した事のないヤツにはexternは不要だろうな
- 267 :◆QZaw55cn4c 2013/06/26(水) 04:07:29.94
- >>266
キーワード extern を1回も使わなくても複数の翻訳単位で系を構成することはできます(棒)
extern は要らない子っ
- 277 :◆QZaw55cn4c 2013/06/26(水) 12:31:20.85
- >>268
グローバル変数を使うときでも制約はありますが extern キーワードを使わなくともリンクできます(棒)
- 282 :デフォルトの名無しさん 2013/06/26(水) 12:44:39.50
- http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.5.4.html
こういうのは古いけど今でも立派に通用するテクニックだ
- 288 :デフォルトの名無しさん 2013/06/26(水) 13:06:27.26
- >>285
ちょっと違うなあ
http://blog.bitmeister.jp/?p=614
>externのついた大域変数は必ずいずれかのモジュールに実体がないとダメで、
>externのつかない大域変数は基本的にexternありと同じだが、いずれのモジュールにも
>実体がなければリンカが実体を作る、という感じになるでしょうか。
リンカに任せるのかよ
バグの温床になりそうだな
- 289 :デフォルトの名無しさん 2013/06/26(水) 13:10:52.54
- ついでにコメ欄
>fs Says:
>6月 11th, 2011 at 11:00 PM
>このような言語仕様になった(externの省略が許されるよう緩和された)理由は、
>もともとUNIX他のオペレーティングシステムのリンカーがFortran言語を前提に
>作られている現状を追認するためなのではないかと思います。Fortranは
>上記の「初期値式を持つ定義」は許されない代わりに、extern宣言は不要ですから。
「extern不要!」と言ってるやつはロートルじゃねーの
俺はexternを省略するな、と教わった口だからな
- 293 :285 2013/06/26(水) 14:33:07.27
- 仮定義っていうのか。勉強になったわ。
仮定義
初期化子を指定しない定義を仮定義という。同じ変数の仮定義は、1つの翻訳単位に複数存在しても構わない。
定義と同様、実体は確保される。仮定義が一つの翻訳単位に複数存在した場合、コンパイラはそれらを1つにまとめ、
0の初期化子を持ったものとして定義する。ただし、全翻訳単位において既に定義が存在すれば、extern宣言された
ものとして振る舞う。この挙動は紛らわしい為、特に必要でない限り仮定義を用いるのは避けた方が無難である。
int n;
尚、同じ仮定義が複数の翻訳単位に存在する場合の、リンク時の動作は規格化されていない。
故に、この場合の動作は未定義である。gccではこの場合、コンパイラが解決している模様。
また、定義と仮定義が同時に存在する場合もコンパイラが解決している模様(言うまでもなく、
定義は2つ以上存在してはならない)。
http://d.hatena.ne.jp/XuHuang/20070624/1182669569
- 294 :デフォルトの名無しさん 2013/06/26(水) 14:34:11.67
- つまりQZは
>この挙動は紛らわしい為、特に必要でない限り仮定義を用いるのは避けた方が無難である。
これを正当化してるわけか
糞だな
- 310 :デフォルトの名無しさん 2013/06/26(水) 21:11:49.11
- >>293
規格書にもポータブルでないと明記されている。
企画書の何処に書かれているか分からないゴミクズが炎上学習企んでるだけ WWWW
- 316 :◆QZaw55cn4c 2013/06/26(水) 21:48:33.57
- >>289
MASM5->MASM6 では EXTERNDEF なるディレクティブが新設されたくらい当たり前に新しい考え方
>俺はexternを省略するな、と教わった口だからな
本質を理解しないと新しいことに対応できなくなりますよね
- 321 :◆QZaw55cn4c 2013/06/26(水) 22:05:58.49
- >>293
>gccではこの場合、コンパイラが解決している模様。
コンパイラがリンクするわけがない。リンカがリンクするんだ。それを書いた奴は誰?URL をさらしてくれないか?
表からみえる gcc はコンパイラドライバであってコンパイラではない
>定義と仮定義が同時に存在する場合もコンパイラが解決している模様(言うまでもなく、定義は2つ以上存在してはならない)。
定義という言葉自体が曖昧。この問題を正確に記述するのであれば、「初期化を伴う定義」と「宣言」または「仮定義」の二つのみを使うべき
初期化を伴う定義はリンクするオブジェクトのすべてにおいて二箇所以上に存在してはならない、それだけの話だ
- 322 :◆QZaw55cn4c 2013/06/26(水) 22:08:41.51
- >>282
残念ながらCならばそんなことをする必要はないMASM6だって必要なかったくらいだからねその著者もあやしいものだね
- 324 :◆QZaw55cn4c 2013/06/26(水) 22:10:33.44
- >>310
リンカやオブジェクトファイルの仕様がCの言語仕様書に明記されるのか?かなり疑問だ
- 325 :◆QZaw55cn4c 2013/06/26(水) 22:12:08.85
- >>279
まだまだこのネタいけるね
- 343 :デフォルトの名無しさん 2013/06/27(木) 22:25:42.00
- extern int array[10000];
こういう定義がふくまれるヘッダーファイル
arrayを使っている(定義している)モジュールをリンクしなければarrayの領域は確保されないが、
int array[10000];
では、使う使わないに関わらず領域が確保されてしまう。
要約するとQzはうんこ
- 344 :デフォルトの名無しさん 2013/06/27(木) 22:27:38.84
- 署名わすれたわ WWWW
要約するとQzはうんこ WWWW
- 408 :デフォルトの名無しさん 2013/06/29(土) 22:50:57.07
- http://www.k-cube.co.jp/wakaba/server/format.html
scanf用の入力フォーマット指定子の中に、
unsigned charの場合が載っていません。
どのように指定したらいいですか?
- 416 :デフォルトの名無しさん 2013/06/30(日) 01:09:09.99
- >>408
そのクソページに書かれてないだけで、正式な規格書には書かれている。
初心者はまともな書籍で学ぶべき
- 423 :◆QZaw55cn4c 2013/06/30(日) 08:22:38.61
- >>416>>421
本当か?
手元のISO/IEC9899:1999 7.19.6.2.12 には書式指定子に %c のunsigned charの場合なるものは存在しないが?
頭沸いていないか?それとも自治スレで完敗したのでまた荒しに来たのか?
- 424 :◆QZaw55cn4c 2013/06/30(日) 08:23:43.53
- >>422
巣ではお前の回答を今か今かと待っているぞ?はやく巣に戻れ
- 425 :デフォルトの名無しさん 2013/06/30(日) 08:40:02.39
- >>423
自治スレ? そんなクソスレ知らねーな
おそらくお前が持ってるのは違法アップロードされた偽物なんだろ。
正規版にはunsigned charへの変換指定が書いてある
- 426 :デフォルトの名無しさん 2013/06/30(日) 09:11:11.21
- 何だと?Qは違法な規格票を使用しているのか
これはホットラインセンターに通報した方がいいって事?
- 427 :デフォルトの名無しさん 2013/06/30(日) 09:22:16.90
- Qzは偽規格書を根拠にextern不要とかほざいてたのか。WWWW
本物にはポータブルじゃないと明記されてるのに。
偽規格書 ワロタ WWWW
- 437 :◆QZaw55cn4c 2013/06/30(日) 23:07:57.24
- >>425
まっ正確にはTC2なんだけどね.
でも,
>正規版にはunsigned charへの変換指定が書いてある
真っ赤な嘘ですねえ,だって,JIS 検索 http://www.jisc.go.jp/app/pager?id=1267490 で JIS X3010 7.19.6.2 を検索しても unsigned char 用の書式指定子なんて見つかんないですからね
お前さんは scanf() 系のどの書式指定子を unsigned char 用だと思ったの?
>>427
ISO/IEC 9899:1999 6.2.2.5
If the declaration of an identifier for an object has file scope and no storage-class specifier,
its linkage is external.
変数でファイルスコープで extern が書いてなかったら,それは外部リンケージ扱いだよ,ってかいてあるしね.それと ISO/IEC 9899:1999 6.9.2.2 を合わせて考えると extern なんて要らない子なんじゃないかな‥‥
少なくともリンカ次第で C の言語仕様書に書かれる話じゃないし.あと,あくまで C の話ね,C++ じゃないよ.
>>426
そんなもんが pdf でほいほい転がってるの?
>>427
>本物にはポータブルじゃないと明記されてるのに。
該当箇所を引用してみてよ.それで当否を客観的に判断できるでしょ,JIS X3010 でもいいからさー,それとも引用できないほど自信が無いの?
引用する際にはちゃんと引用元を明記しないと,著作権法第48条の3 に違反し,同法122条によれば50万以下の罰金だそう,あと同法123条により親告罪じゃないから,場合によっては起訴されるかもしれないよ.
- 438 :デフォルトの名無しさん 2013/06/30(日) 23:12:52.26
- >>437
全部まとめてアマゾンギフト10万円で教えてやるよ。 WWWW
- 439 :◆QZaw55cn4c 2013/06/30(日) 23:17:59.46
- >>438
該当箇所を引用してみてよ.それで当否を客観的に判断できるでしょ,JIS X3010 でもいいからさー,それとも引用できないほど自信が無いの?
- 440 :デフォルトの名無しさん 2013/06/30(日) 23:29:12.03
- >>439
全部まとめてアマゾンギフト10万円で教えてやるよ。 WWWW
騙し取られるのが心配なら、詐欺った場合は刑事事件で告訴すりゃ良いだろ。WWWW
- 441 :◆QZaw55cn4c 2013/06/30(日) 23:53:53.12
- >>440
該当箇所を引用してみてよ.それで当否を客観的に判断できるでしょ,JIS X3010 でもいいからさー,それとも引用できないほど自信が無いの?
- 442 :デフォルトの名無しさん 2013/07/01(月) 00:02:35.76
- >>441
全部まとめてアマゾンギフト10万円で教えてやるよ。 WWWW
騙し取られるのが心配なら、詐欺った場合は刑事事件で告訴すりゃ良いだろ。WWWW
- 443 :◆QZaw55cn4c 2013/07/01(月) 00:32:58.43
- >>442
該当箇所を引用してみてよ.それで当否を客観的に判断できるでしょ,JIS X3010 でもいいからさー,それとも引用できないほど自信が無いの?
あと
>騙し取られるのが心配なら、詐欺った場合は刑事事件で告訴すりゃ良いだろ。
意味不明。大丈夫?豆腐の角にぶつけてみるといいよ
- 445 :デフォルトの名無しさん 2013/07/01(月) 00:41:25.29
- おっと、その前に教えた事が理解出来るかテストだ
>>343に反論してみろ WWWW
- 447 :◆QZaw55cn4c 2013/07/01(月) 07:01:51.45
- >>343
ごめんね: keyword:Qzでアボーンしていたので見てなかった
ふむ、ひとつの makefile で複数のバイナリ(サーバープログラムとクライアントプログラム、とか)を生成するとき、
特定のバイナリは、くだんのヘッダは読むけれどもそのヘッダにimplyされている全機能や array[] を使うとは限らない、ということはありうるわね
でも手元の gcc では、使わなければ int array[10000] であっても増えないね
ideone ではこうだった
http://ideone.com/Digq4t
http://ideone.com/aYFG9w
>int array[10000];
>では、使う使わないに関わらず領域が確保されてしまう。
処理系依存じゃないの?
処理系依存にうるさい人が処理系依存の事例を挙げるなんてダブルスタンダードもいいとこだね
>>445
回答しといたよ
これは授業料なしで引用していただける資格があると思うよ
- 449 :◆QZaw55cn4c 2013/07/01(月) 07:08:54.57
- おっとシェアードライブラリの可能性を忘れてたね
- 450 :◆QZaw55cn4c 2013/07/01(月) 07:26:20.18
- >>448
手元の cygwin では、-static を付けても dll まではリンクしてくれないから、例示としては不徹底だけれども http://codepad.org/DUJxHDoV
>定義のみで使われない変数や関数はコンパイル時に削除される
そういう賢い処理系もあるようだね。シェアードライブラリのヘッダだったらその中の int array[] とかはどうなるの?
>>445
回答しといたよ
これは授業料なしで引用していただける資格があると思うよ
- 451 :◆QZaw55cn4c 2013/07/01(月) 08:03:56.34
- >>450
おっと肝心なところがぬけてたねhttp://codepad.org/wHHXCR5m
なんだか我ながら連投連投で必死だね
こんだけ必死なんだから情けを恵んでやってもいいんじゃないかな>>445
- 452 :デフォルトの名無しさん 2013/07/01(月) 08:25:11.18
- >>447
落第。先に教授料10万円はらいな。 WWWW
ideone.com/P9UkTE
ideone.com/TJH0fO
しかし、lsでプログラムのサイズ調べて、ドヤ顔するとは大笑い海水浴場だ。朝から腹痛てー WWWW
渾身の自爆ギャグに免じてこのレス自身は無料レクチャーにしてやるよ。 WWWW
>>448
アホは引っ込んで炉。仮定義オブジェクトの話してるんだから、コンパイラが削除するわけねーだろ。
リンカーなら出来なくはないが、参照され無くても存在する事に意味があるオブジェクトもあるので、
そういう機能が有ったとしてもオプショナルだ。
>>450-451
お前バカなんだから、朝から無駄なエネルギー消費すんな。 WWWW
- 453 :◆QZaw55cn4c 2013/07/01(月) 08:36:02.78
- >>452
>lsでプログラムのサイズ調べて、ドヤ顔するとは大笑い海水浴場だ
たしかに未初期化領域は BSS 領域に展開されるので実行ファイルのサイズをみてどうこうというというのはギャグだねえ
やっぱり>>343は認めなくちゃいけないね
>お前バカなんだから、朝から無駄なエネルギー消費すんな。
ほんとだねえ、今日一日は交通事故に注意しよう‥‥‥