正在#ifdef内部更新现有变量值?

问题描述 投票:0回答:2

我是C ++的新手,我正在尝试在以下代码块中更新BOOL变量:

#define REMOVE_REPLACED_BY_SUCESSOR 1 

bool rm_by_succ = 0;

#ifdef REMOVE_REPLACED_BY_SUCESSOR
    rm_by_succ = 1;
#endif

但是我的g ++编译器给我以下错误:

‘rm_by_succ’ does not name a type

有人可以向我解释我做错了什么吗?

c++ c-preprocessor
2个回答
2
投票

如dxiv所说,您不能在函数外部拥有代码。但是,您可以这样做:

#ifdef REMOVE_REPLACED_BY_SUCESSOR
    bool rm_by_succ = 1;
#else
    bool rm_by_succ = 0;
#endif

更好的是,将这些变量定义为const,并使用truefalse


0
投票

假设rm_by_succ在全局范围内声明,那么您不能在声明后立即重新分配它。此类代码在全局范围内是不允许的。您将不得不在函数内部进行重新分配,例如main(),例如:

#define REMOVE_REPLACED_BY_SUCESSOR 1 

bool rm_by_succ = false;

int main() {
    #ifdef REMOVE_REPLACED_BY_SUCESSOR
    rm_by_succ = true;
    #endif

    ...
}

或者,您可以这样编写声明本身:

#define REMOVE_REPLACED_BY_SUCESSOR 1 

bool rm_by_succ =
    #ifdef REMOVE_REPLACED_BY_SUCESSOR
    true
    #else
    false
    #endif
;
© www.soinside.com 2019 - 2024. All rights reserved.