掲示板一覧   -   トピック一覧
   Enterprise Architect 全般
     #if 0 #else #endif で囲まれたメソッドが読み込まれない


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
sugimoto
投稿日時: 2007-11-26 17:00
EA Administrator
投稿: 1895

#if 0 #else #endif で囲まれたメソッドが読み込まれない

○ご指摘

以下のようなC++のヘッダを読み込みんだところ、funcC()がクラスに
読み込まれませんでした。読み込み時にエラーは発生しませんでした。

class ClassA
{
public:
  void funcA(void);
  #if 0
    // void funcB(void);
  #else
    void funcC(void);
  #endif
};


○回答

ご指摘の現象を確認いたしました。

現状は、#if の値に関わらず、#else ~#endif 間の操作や属性に
つきましては、クラスに読み込まれていないようです。
(#if と #else の間にコメントアウトされた箇所がありますが、
今回の現象への影響はないようです。)

弊社ではソースコード読み込み時のプリプロセッサにつきましては、
EAは判断していないという認識を持っておりましたので、この現象に
つきまして、開発元に連絡し、調査を進めて参ります。
大変申し訳ございませんが、クラスに読み込みたい情報につきましては、
#else ~#endif から外して読み込んでいただきますようお願いいたします。
sugimoto
投稿日時: 2007-11-28 13:29
EA Administrator
投稿: 1895

Re: #if 0 #else #endif で囲まれたメソッドが読み込まれない

本ご指摘について、開発元に確認を行いました。

現状、Enterprise Architectでは、ソースコード読み込み時の
プリプロセッサにつきましては、一切判断していないという
認識をもっていたのですが、実際には、現状、一部判断を
行っておりました。

現在の動作としまして、プリプロセッサを完全に判断することは
コンパイラのような機能を有する必要があり困難であるため
行っていないのですが、

・最初のブロック(今回の場合は、#if~#else)は読み込みを行い、
・それ以降のブロック(今回の場合は、#else~#endif)は読み込みを行わない、

という動作を行っています。
#if 0 なのか #if 1 なのかという判断は行っていません。

すべてのユーザーにとって上記対応が有効ではないことは認識
しているが、完全な対応は困難であることから、現状は上記の
ような対応を行っているという状況です。


プリプロセッサの判断について、完全な判断は困難だと思いますので、
恐れ入りますが、Enterprise Architectに読み込むソースコードに
つきましては、プリプロセッサの最初のブロックに情報を記述いただ
きますようお願いいたします。

今回の場合は、以下のように、#if~#else と #else~#endif間の
情報を置き換えていただければと思います。

#if 1
  void funcC(void);
#else
 // void funcB(void);
#endif

お手数をお掛けいたしますが、ご対応のほど、よろしくお願いいたします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ