C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎


(過去ログ 47 を表示中)

[トピック内 19 記事 (1 - 19 表示)]  << 0 >>

■25554 / inTopicNo.1)  アンダーバー + 大文字 + アンダーバーのマクロ名の謎
  
□投稿者/ ネタ好き (634回)-(2008/09/22(Mon) 12:44:40)

分類:[C/C++] 

私は現在STLの実装について調べているのですが、どうしてもわからない事があって困っています。
それは、STLの実装の際に使用するマクロ名が「アンダーバー + 大文字 + アンダーバー」となっているかと言う事です。
STL実装に関する書籍を読んだところ、「マクロ汚染の危険性等の有名な害があるから」と書いてあったので、マクロとスコープ関係の理由だと思ったのですが、アキラさんによるとその理由ではないとの事です。
その証拠にBoostにはそのような命名規則は無いとの事です。
説得力がありますのでおそらく違うのでしょう。
では、一体理由は何なのでしょうか?
是非教えてください。
よろしくお願いいたします。
引用返信 編集キー/
■25555 / inTopicNo.2)  Re[1]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ 焼き鳥 (1回)-(2008/09/22(Mon) 12:51:06)
無差別に技術をついばむ鳥

STLをつつき彫る0−ライブラリ実装の心得0。汚されないように注意を払え。
2008-09-20 Sat > 07:28
http://indori.blog32.fc2.com/
引用返信 編集キー/
■25557 / inTopicNo.3)  Re[1]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ 774RR (221回)-(2008/09/22(Mon) 12:57:57)
日本語がさっぱりわからん・・・「てにをは」が変というレベルではなくさっぱり理解不能。
何を訊いているのだろうか。

とりあえず妄想してみるに JIS X 3014:17.4.3.1 を読んでみるべし

引用返信 編集キー/
■25558 / inTopicNo.4)  Re[2]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ やじゅ (655回)-(2008/09/22(Mon) 13:11:31)
やじゅ さんの Web サイト
No25557 (774RR さん) に返信
> とりあえず妄想してみるに JIS X 3014:17.4.3.1 を読んでみるべし
>

774RR さんの補足

日本工業標準調査会のホームページ
http://www.jisc.go.jp/app/JPS/JPSO0020.html
X3014 で検索

JISX3014 プログラム言語C++
17.4.3.1 予約名
引用返信 編集キー/
■25560 / inTopicNo.5)  Re[2]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ アキラ (107回)-(2008/09/22(Mon) 13:28:52)
アキラ さんの Web サイト
STLをつつき彫る0−ライブラリ実装の心得0。汚されないように注意を払え。
http://indori.blog32.fc2.com/blog-entry-392.html
引用返信 編集キー/
■25561 / inTopicNo.6)  Re[1]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ επιστημη (1330回)-(2008/09/22(Mon) 13:29:17)
επιστημη さんの Web サイト
> それは、STLの実装の際に使用するマクロ名が「アンダーバー + 大文字 + アンダーバー」となっているかと言う事です。

たまたまみかけたSTL実装がそうなってたてこと?
今まで目にしたあらゆるSTL実装がそうなってたてこと?
どこかで目にしたSTL実装規約にそう書いてあったてこと?

引用返信 編集キー/
■25565 / inTopicNo.7)  Re[3]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ ネタ好き (635回)-(2008/09/22(Mon) 14:09:47)
>たまたまみかけたSTL実装がそうなってたてこと?
>今まで目にしたあらゆるSTL実装がそうなってたてこと?
>どこかで目にしたSTL実装規約にそう書いてあったてこと?

STL実装本(C++標準テンプレートライブラリ)に、この命名規則でマクロ等を命名しないと、
「マクロ汚染等の有名な理由で害が発生する」と書いてあったので、
「どのような害が発生するのか」と、「有名な理由とはなにか」が非常に気になっています。

今日までは、マクロ汚染という記述からマクロ名の上書き問題と、スコープの問題と、インクルード順序による問題だと判断したのですが、アキラさんによるとそうではないとの事なので、また同じ悩みが発生している状態なのです。
引用返信 編集キー/
■25570 / inTopicNo.8)  Re[4]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ επιστημη (1333回)-(2008/09/22(Mon) 14:20:43)
επιστημη さんの Web サイト
うーん、わかんないや。

ユーザコードが _ で始まるマクロを使わなければ、
"すくなくとも"ライブラリが使ってるやつとカブることはない。

ってことしか知らんです。実装者の異なる複数のライブラリで
同じ _大文字_ を使っちゃったらライブラリ2つでも1/26の確率でカブりますよねぇ♪
# 実際には _大文字_うんちゃらかんちゃら なのでほとんどカブんないけど

>「どのような害が発生するのか」

悪名高き MIN/MAX マクロとか?

引用返信 編集キー/
■25572 / inTopicNo.9)  Re[4]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ ネタ好き (636回)-(2008/09/22(Mon) 14:25:35)
774RRさんへ返信
STL実装時に、この命名規則でマクロ等を命名しないと問題が発生するそうなので、その理由とどのような問題が発生するのかを聞いています。
なお、この命名規則はC++標準規格にないから「安全」なのだそうです。
C++標準規格で既に使用されていれば問題が発生しますからね。
アンダーバー一つから始まる名前は、標準規格で使用しない事が約束されているそうです。
ちなみに、この命名規則がSTL実装の常識だと主張しているのは、
P.J.Plauger, Alexander A.Stepanov, Meng Lee,David R.Musserです。
引用返信 編集キー/
■25576 / inTopicNo.10)  Re[5]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ ネタ好き (637回)-(2008/09/22(Mon) 14:49:42)
επιστημη さん返信有難うございます。

>悪名高き MIN/MAX マクロとか?

その通りだと思います。おそらく、数多くある理由のうちの1つなのでしょう。
引用返信 編集キー/
■25578 / inTopicNo.11)  Re[5]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ アキラ (108回)-(2008/09/22(Mon) 15:40:01)
アキラ さんの Web サイト
No25572 (ネタ好き さん) に返信

STLの多くの実装がアンダーバーで始まる名前を使用している、というのと
STLの規約でアンダーバーで始まる名前を付けなければならない、というのは大きく違いますよ。

ネタ好きさんのいう書籍に載っているのはおそらく「推奨」ですよね。
(STL設計者のAlexander Stepanovが言っていたとしても)
引用返信 編集キー/
■25581 / inTopicNo.12)  Re[6]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ アキラ (110回)-(2008/09/22(Mon) 15:52:22)
アキラ さんの Web サイト
No25576 (ネタ好き さん) に返信

ブログのコメントにも書いたように、先頭アンダーバーと、連続したアンダーバーは処理系に予約されています。
ユーザーが作成したライブラリにも先頭アンダーバーは使わないです。(使ってる人はたまにいますけど)
引用返信 編集キー/
■25585 / inTopicNo.13)  Re[7]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ ネタ好き (638回)-(2008/09/22(Mon) 17:08:11)
アキラ さん に返信
返信有難うございます。質問の件なのですが、この本でははっきりと書かれておらず、分散して何度か話題に出ているので「推奨」かどうかは正直言って難しいところです。ただ、私の理解では「推奨」と言うよりももっと強い言い方に感じ取れました。
理由は色々ありますが一部要約して抜粋します。

・__(ダブルアンダー)は処理系としてC++標準委員会で決定されているので、STLとしては使うべきではないようです。※それとなく書いている。
・「_は本来つけるべきである」と明示されています。
・マクロだけではなく、変数にもこの命名規則を付けるべきだそうです。
・_+先頭大文字は実装者用としてC、C++標準に予約されているそうです。
※ライブラリ実装者どうしで名前がかぶる危険性はまだあります。
・数多くの問題があるから一々それを書かないと書かれています。
そんなに問題が多いといわれたら、読者は心配になります。
・utility標準ヘッダとして_UTILITY_が紹介されており、これがよい見本と書かれています。
ですから_+先頭大文字の所を、私は理想的には_ + 大文字 + _にしたほうがよいと勧めていると受け取りました。

これらの理由から、どうしても「推奨」とは私は思えませんでした。
ここまでアンダーバー+先頭大文字(マクロ以外でも!)と書かれていれば、殆ど必須条件といっているように聞こえます。特にこの豪華メンバーに言われたら・・・
ただ、理由を知らないまま鵜呑みにするのは技術者として失格ですので、「あえて命名規則を守らず」に発生する問題を知ろうとは考えています。それで、ブログにアンダーバーはつけないと書きました。
アキラさんへの明確な返信にはならないかもしれませんが、今のところはこのような状況です。
引用返信 編集キー/
■25587 / inTopicNo.14)  Re[8]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ aetos(旧シャノン) (3回)-(2008/09/22(Mon) 17:54:28)
No25585 (ネタ好き さん) に返信

話がかみ合っていないように見えるのは気のせいですか?
STL 実装者向けのドキュメントということは、それは単なるライブラリではなくて、言語処理系の一部であるライブラリの実装者向けなのではないでしょうか?
引用返信 編集キー/
■25589 / inTopicNo.15)  Re[8]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ アキラ (112回)-(2008/09/22(Mon) 18:09:22)
アキラ さんの Web サイト
No25585 (ネタ好き さん) に返信

"STLだから"先頭アンダーバーを付ける、というわけではないと言ってるつもりなのですが。
本に書いてるのが本当かどうか調べるよりも、まずは規格に目を通したほうがいいと思います。
引用返信 編集キー/
■25590 / inTopicNo.16)  Re[4]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ aetos(旧シャノン) (4回)-(2008/09/22(Mon) 18:20:30)
No25565 (ネタ好き さん) に返信

件の本はどうやらこれですね。
http://www.amazon.co.jp/dp/4894714035
引用返信 編集キー/
■25591 / inTopicNo.17)  Re[5]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ aetos(旧シャノン) (5回)-(2008/09/22(Mon) 18:22:06)
No25590 (aetos(旧シャノン) さん) に返信
> ■No25565 (ネタ好き さん) に返信
>
> 件の本はどうやらこれですね。
> http://www.amazon.co.jp/dp/4894714035

> 出版社/著者からの内容紹介
> 標準テンプレートライブラリ(STL)は、プログラミング言語C++のANSI/ISO標準規格のライブラリ部における重要なコンポーネントです。本書は、C++標準が規定するSTLのテンプレートクラス、テンプレート監修の使い方を、多くのコードを示しながら詳細に解説するものです。

テンプレートかんしゅうw カワユスww
引用返信 編集キー/
■25592 / inTopicNo.18)  Re[5]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ ネタ好き (639回)-(2008/09/22(Mon) 18:27:31)
アキラさんに返信
私も規格を調べようと一度考えたのですが、この本に「この命名規則が規格にないから安全」という記述があったので、無いものを調べても仕方が無いと考えて調べるのを止めたのです。
それと、この本はどう見ても「実装の際のテクニック」であって、標準規格に定義されているとはとても思えなかったのです。



aetos(旧シャノン) さん に返信
返信してくれて有難う。

>STL 実装者向けのドキュメントということは、それは単なるライブラリではなくて、言語処理系の一部であるライブラリの実装者向けなのではないでしょうか?

私も少しそんな気がしていました。私の場合は言語処理系としてSTLを実装するつもりです。
ネタ指向コンパイラを実装するためにSTLの実装を学んでいる最中です。


> 件の本はどうやらこれですね。
> http://www.amazon.co.jp/dp/4894714035

そうです。その本です。
私の好みに合致しましたし、廃刊臭がするので急いで買いました。

引用返信 編集キー/
■25594 / inTopicNo.19)  Re[6]: アンダーバー + 大文字 + アンダーバーのマクロ名の謎
□投稿者/ ネタ好き (640回)-(2008/09/22(Mon) 18:30:08)
No25591 (aetos(旧シャノン) さん) に返信
> テンプレートかんしゅうw カワユスww

それはいっちゃだめぇw
見なかったことにしてあげてw
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -