Могу ли я использовать #undef таким образом? - PullRequest
0 голосов
/ 28 мая 2010

Я хочу получить некоторые настройки, которые храню в реестре, и если они отличаются от #define Я хочу переопределить его, могу ли я сделать это таким образом?:

#define DEFINED_X "testSetting"

void LoadConfig()
{
    regConfigX = some value previusly stored in the registry;
    if(regConfigX!=DEFINED_X)
    {
        #undef DEFINED_X
        #define DEFINED_X regConfigX
    }
}

Я думал, что #define использовался только при компиляции, будет ли этот код работать при запуске скомпилированного exe?

Ответы [ 3 ]

1 голос
/ 28 мая 2010

#define и #undef происходят еще до того, как ваш исходный код попадет в компилятор. Ничего общего с #define s не может произойти во время выполнения.

Вам также следует проверить библиотеку препроцессора Boost.

1 голос
/ 28 мая 2010

Нет. #define и #undef являются директивами предварительной обработки ; они оцениваются до компиляции исходного кода.

Для этого вам нужно использовать переменную, а не макрос.

0 голосов
/ 28 мая 2010

Нет, используйте статическую переменную для хранения значения DEFINED_X.

...