mcrblog

vcpp-ml

1999年12月

30

[vcpp 00036067] Re: Re: Re: メンバ変数の参照

村田です。

> こちらは、かわむら@DSTです。
>
> ex) inline int &rTest(){ return Philippine.test; };
>  rTest()++;// Philippine.testのインクリメント
> # 中野@PALさんのマクロとの違いは、アクセス制限を掛けられる点です。

つけたしておくと、型とかデバックのときに見えるとか、とにかくマクロよりは良い
ですね。

> >参照型のメンバを使えば、アドレス計算を省略できるからだと思います。
> int は、クラス(や構造体)ではないから、メンバはもてません。
> また、かわむらはアドレス計算の省略はコンパイラの最適化に任せるべき、
> と 考えますが いかがでしょう。

いえ、この場合は、eがintでabcdはクラス(あるいは構造体)ということです。

>a.b.c.d.e.f みたいな深いアドレス計算になったらどうなるんでしょうね。もし
>も気が向いたらやりますが、期待はしないでください。

変わらないですね。考えてみれば構造体のメンバのオフセットは事前にわかっている
ので一発でアクセスできるのですね。訂正します。アドレス計算が計算が省略できる
のは、参照や、ポインタだった場合ですね。つまり、
a->b->c->d->e->f
の時です。

> >>ところで、この参照変数って、実体は持っているのでしょうか?
> >>(例えば、constポインタで実装されているとか)
> >>ご存知の方、教えて下さい。
> >
> >実体を持っていると思います。sizeofで調べればすぐわかりますね。
>
> 実装方法は、各々のコンパイラ(と最適化)に依存しそうな気がしますが、
> 実体は持っていないです。
> ただし、参照先のアドレスを持つための領域は持っているかもしれないです。
> 調べるのであれば、sizeofでなく、&(アドレス演算子)でしょう。

すいません。実体というのはアドレスを格納している領域ということです(86ではお
そらく4バイト)。
私のいいたかったのは、基本的には参照といえども、アドレスを格納している限り、
ポインタと同じくサイズはあるということです。もちろん、最適化の結果、サイズが
なくなることはあるでしょうが。
あと、sizeofを使うというのは、

struct Hoge {
    int i ;
} ;
より、
struct Hoge {
    int i ;
    int &ref ;
} ;
の方が大きくなるので、サイズがあるのではと。
30

[vcpp 00036066] Re: [vcpp 00036021] ESQL/Cの使い方

緒方です。

ESQL/Cが何なのかよくわかっていませんが、
カスタムビルドの設定だけでは、ダメなような気がします。

(1)VC++のIDEでメニューから[ツール]-[オプション]で[オプション]ダイアログを表
示。
(2)[ディレクトリ]タブをクリック。
(3)[表示するディレクトリ]で[実行可能ファイル]を選択。
(4)[ディレクトリ]にnsqlprepへのパスを登録。

必要なら、[インクルードファイル]や[ライブラリファイル]のパスも登録する必要が
あります。

カスタムビルドの設定と(1)~(4)の設定が正しければ、F7キーを押すだけで、.sqcが
..cに変換されて、最終的に.exeが生成されると思います。
30

[vcpp 00036065] Re: Re: メンバ変数の参照

ろばです。

"A.Kawamura" wrote:
> では、僭越ながらかわむらが こっそり 御教えします。

> プロジェクトの設定を開いて下さい。
> C/C++タブのカテゴリ「ファイルリスティング」でリスティングタイプが
> 御望みのところだと思います。
> # リスティングファイルにファイル名を入れ忘れないで下さいね。

ありがたき幸せ。

ということで、早速試してみました。

class A {
public:
int i;
};
class B {
int x; // dummy
A a;
int j;
public:
void foo(void) {
int k;
k = a.i;
k = j;
}
};

みたいなコードのアセンブラソースは、

; 18   :  k = a.i;

mov eax, DWORD PTR _this$[ebp]
mov ecx, DWORD PTR [eax+4]
mov DWORD PTR _k$[ebp], ecx

; 19   :  k = j;

mov edx, DWORD PTR _this$[ebp]
mov eax, DWORD PTR [edx+8]
mov DWORD PTR _k$[ebp], eax

となりました。最適化なしです。どっちでも変わりないです。よね。

a.b.c.d.e.f みたいな深いアドレス計算になったらどうなるんでしょうね。もし
も気が向いたらやりますが、期待はしないでください。
-- 
ろば l...@loba.net, URL http://www.loba.net/
Tomohira Tabata, PhD, postgraduate research engineer,
ECE UCSD, 9500 Gilman Drive, La Jolla, CA 92093-0407, USA
30

[vcpp 00036064] Re: Re: メンバ変数の参照

 こちらは、かわむら@DSTです。

Tomohira Tabataさんの
[vcpp 00036062] Re: Re: メンバ変数の参照 に関してです。

>Tomohira Tabataさんが おっしゃいました・・・・
>------引用ここから、(適宜省略・改行位置の変更をしてます)-----
>
>                                  どなたかこっそり vcpp でコンパイル後
>のアセンブラコードの見方を教えてくださいませんか? vcpp でも試してみた
>いのです。
>
>------ 引用ここまで。(適宜省略・改行位置の変更をしてます)-----

では、僭越ながらかわむらが こっそり 御教えします。

プロジェクトの設定を開いて下さい。
C/C++タブのカテゴリ「ファイルリスティング」でリスティングタイプが
御望みのところだと思います。
# リスティングファイルにファイル名を入れ忘れないで下さいね。

デバッグであれば、混合モードでの表示でも宜しかろうと思います。

こちらは、かわむら@DST( MailTo:a...@pc-daiwabo.co.jp )でした。
30

[vcpp 00036063] VC60のメンバ自動表示が上手く作動しない

お世話になっています。

ついこのあいだまで、メンバ自動表示って便利だなぁ
と思って使っていたのですが、最近 追加した構造体の
メンバが自動表示されなくなってきてしまいました。


具体的には、

class CData
{
public:
TAMA_REQUEST TamaRequest[256];
TAMA_REQUEST_SEND TamaRequestSend[256];
TAMA_REQUEST_HIT_SEND TamaRequestHitSend[256]; //玉の被弾状況
//と、ここまでは順調だったのですが、
//あらたに
        NEW_DATA                        NewData[256];
//とやると、これを認識しません。さらに、
        TAMA_REQUEST                   AAA[256];
//と、他の場所で使えている構造体を宣言しても、
//AAAはやはり使えません。public直後に書いても使えません。

}

このような状態です。
投稿の都合上、5つしか宣言してませんが、
実際には100近く宣言しています。 90あたりからおかしくなりました。
(クラス内でこんなに宣言するほうもうするほうですが^^;; )


マニュアルを見てみたところ、
構文に間違いがある場合、コメント文内にある場合、自動表示がOFFに
なってる場合には自動表示されないとあるのですが、
このいずれにも該当しないので、原因がわからずじまいです。


ひょっとして、メンバ自動表示が認識できる上限というものが
あるのでしょうか?
サービスパック3は入れてみたのですが、やはり駄目です。



環境
Windows 2000(2072)  Dual p3  VS60+Sarvicepack 3

以上です、どなたか同様の問題を解決されてる方いましたら、
助言をいただければさいわいです。


-- 
teyan mailto:t...@geocities.co.jp
記事検索
Amazon.co.jp
  • ライブドアブログ