私の書いたコメントに対しての返信のあと,話が進んでいますが,それはさておいて
http://dixq.net/forum/viewtopic.php?f=3&t=15121#p120564に対しての返信をすべて書いてしまいます。
結果として,その後のコメントと重複する部分もあります。
ただの屍のようだ さんが書きました:>アセンブリコードを出力させて,そのコードを見た方がよいでしょう。
→前も言いましたが、デバッグスキルとアセンブラは後回しです。
オフトピック
前にも言ったというのは,このスレッド中のどの記述でしょうか。
他のスレッドであなたが宣言したことなんて,書いていないのと同じです。
アセンブリを見るとかしないのであれば,メモリ上でどう展開されるかなんて気にするだけ無駄です。
C++を使う上で,メモリ上でどう展開されるかなんて知る必要が無いですから (規格上,決められていない)。
ポインタ値がメモリのアドレスだとかすらも実装依存事項で,そんなことは知らずともC++でプログラムを書くことができます。
ただの屍のようだ さんが書きました:>naohiro19さんのこの指摘には,もっと真摯に対応すべきことだと思います
→コメントには構造体への誤認というタイトルのサイトがありましたが、自分のサンプルにおいて構造体を使用していません
→話題を広く広げて、分岐を作ったりすると収拾が大変なのでスルーしました。
リンク先をちゃんと読みましたか。
構造体に限らず,識別子一般で使えない,ということがちゃんと書いてあります。
少なくとも,
ただの屍のようだ さんが書きました:未定義だと思うのでしたら、名前空間を削除して検証してください。
は,問題を理解していないようにしか読めませんでした。
「未定義だと思う」という表現は,規格書に「未定義である」と書いてある,つまりはC++として「未定義である」ことを知っている場合に使う表現ではないですから。
オフトピック
「だと思う」は「それが事実かどうかわからないがそう考える」ということなので
誤認とはどの項目について,どのように誤認したと考えているのでしょうか。
書かれているURIと,その前の引用文らしきもの (歴史的経緯(NewsgroupやMailでの利用)から,掲示板においても>から始まる行は引用文であることが多い) を見る限り,予約済み識別子の範囲についてでしょうか。
書かれているURIからvstudio/を抜いて
http://msdn.microsoft.com/ja-jp/library ... .110).aspxを指定すれば,このページが機械翻訳であることがわかります。
おそらく,引用文らしきものの中で明確に引用している部分 (”で始まり”で終わる部分) は,同サイトの
Microsoft 固有の仕様 →
2 個のアンダースコアまたは大文字に続いてアンダースコアで始まる識別子の名前を選択します。 ANSI C 規格ではコンパイラ用に予約されています。これらの文字で始まる識別子名を使用できます。 ファイル レベルのスコープ識別子は最初の 2 桁の文字としてアンダースコア () と小文字で指定する必要があります。 これらの文字で始まる識別子名では予約されています。 通常Microsoft ではアンダースコアおよび Microsoft 固有のキーワードの名前のマクロ名と二つのアンダースコアを開始するには大文字を使用します。 名前の競合を回避するには二つのアンダースコアで始まらない常にアンダースコアで始まる識別子名または大文字にしています。
終了 Microsoft 固有の仕様→
の一部だと思いますが,ここに対応する英文は,
http://msdn.microsoft.com/en-us/library ... .110).aspxの
Microsoft Specific
Do not select names for identifiers that begin with two underscores or with an underscore followed by an uppercase letter. The ANSI C standard allows identifier names that begin with these character combinations to be reserved for compiler use. Identifiers with file-level scope should also not be named with an underscore and a lowercase letter as the first two letters. Identifier names that begin with these characters are also reserved. By convention, Microsoft uses an underscore and an uppercase letter to begin macro names and double underscores for Microsoft-specific keyword names. To avoid any naming conflicts, always select identifier names that do not begin with one or two underscores, or names that begin with an underscore followed by an uppercase letter.
END Microsoft Specific
です。日本語側は,「not」が訳から抜けているために意味が大きく変わる誤訳であり,さらに英文レベルでも規格と齟齬があります。
以下,標準規格より引用します。
ISO/IEC 9899:1999 7.1.3 Reserved identifiers
- All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use.
- All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.
ISO/IEC 14882:2011 17.6.4.3.2 Global names
- Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter (2.12) is reserved to the implementation for any use.
- Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.
JIS X 3010:1993 7.1.3 予約済み識別子
- 下線に続き英大文字1 字又は下線に続きもう一つの下線で始まるすべての識別子は,いかなる使用に対しても常に予約済みとする。
- 一つの下線で始まるすべての識別子は,通常の識別子及びタグ名前空間の双方におけるファイル有効範囲をもつ識別子としての使用に対して,常に予約済みとする。
規格の文は上記の通りです。
ですから,MS-Specificについての説明文中の
Identifiers with file-level scope should also not be named with an underscore and a lowercase letter as the first two letters.
は,
Identifiers with file-level scope should also not be named with an underscore as the first one letter.
あたりが本来の規格に沿った文です。
この項で私の誤認と書くならば,同時にISO/IEC 14882の上記の段落を引用した上で,C++においては「__から始まる」だけではなく「__を含む」識別子全てが予約済み識別子である,ということの指摘を書くくらいは必要です。
「何が誤認か」をわかるように記述し,その根拠となる資料を提示するのは「誤認」と書いた側の責務です。
もちろん,先に私が引用した文中で書いた,ただの屍のようださんが書かれている「誤認」が上記を意味しているかどうか,私は知り得ませんが。
ただの屍のようだ さんが書きました:互いの誤認を解くためにも、”名前変えずに”回答してください。
少なくとも1998年頃から,プログラム系掲示板では3文字のアカウントがとれないような場合を除き常にこの名前を使っています。
「”名前変えずに”」と二重引用符で強調しているのは,私が名前を変えたと疑っているのでしょうか。
そうであるならば,どのコメントが,私が名前を変えて書いた物だと疑ったのでしょうか。
オフトピック
私だけで無く,疑ったコメントを投稿された方にも失礼な話だと思いますが。
あと,「互いの誤認」とやらが何かも説明して下さいね。
何が誤認か書かれておらず,当然その根拠も示されていませんから。