1

プリプロセッサ定数の値を保存してから「上書き」しようとしています。

私の問題:以下のコードは、変数 'A' にプリプロセッサ定数の値を格納しようとし、コードはその変数を定義解除してから、新しい値を持つように再定義します。問題は、変数 'A' が古い値ではなく、新しく定義された値を持つことです。その参照ではなく、プリプロセッサ定数の値を保存できますか (何が起こっているように見えますか)?

#ifdef CUSTOM_EVENT_CALLBACK_DEFINED
  #define SUB_CUSTOM_EVENT_CALLBACK_DEFINED CUSTOM_EVENT_CALLBACK_DEFINED
  #undef CUSTOM_EVENT_CALLBACK_DEFINED
#endif
#define CUSTOM_EVENT_CALLBACK_DEFINED "def"

int main()
{
    printf(CUSTOM_EVENT_CALLBACK_DEFINED);     // prints out "def". 
    printf("\n");
    printf(SUB_CUSTOM_EVENT_CALLBACK_DEFINED); // prints out "def". I was hoping this would be "abc"
    printf("\n");

    system("PAUSE");
    return 0;
}

// Usage: where the function def is a callback function for a window in a civil engineering program that runs ontop of windows
int def(int id, int cmd, int type)
{
    #ifdef SUB_CUSTOM_EVENT_CALLBACK_DEFINED
      SUB_CUSTOM_EVENT_CALLBACK_DEFINED(id, cmd, type);
    #endif

    // perform my custom code here
}
4

1 に答える 1

2

短い答え - いいえ、それは不可能です。マクロはそのようには機能しません。

しかし、あなたが本当にこれを行う必要があるとは思えません。たとえば、値を上書きする前に値を変数に格納することで回避できます。

#ifdef CUSTOM_EVENT_CALLBACK_DEFINED
  std::string SUB_CUSTOM_EVENT_CALLBACK_DEFINED = CUSTOM_EVENT_CALLBACK_DEFINED;
  #undef CUSTOM_EVENT_CALLBACK_DEFINED
#else
  std::string SUB_CUSTOM_EVENT_CALLBACK_DEFINED = "";
#endif

#define CUSTOM_EVENT_CALLBACK_DEFINED "def"

int main()
{
    printf(CUSTOM_EVENT_CALLBACK_DEFINED);     // prints out "def". 
    printf("\n");
    printf(SUB_CUSTOM_EVENT_CALLBACK_DEFINED); // prints out "def". I was hoping this would be "abc"
    printf("\n");

    system("PAUSE");
    return 0;
}

または、この目的でマクロをまったく使用しないでください。

于 2012-11-20T05:05:57.873 に答える