gpt4 book ai didi

c++ - 在 block 中#defining 真的是一种代码味道吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:04:55 24 4
gpt4 key购买 nike

我读到 block 内的#defining 和#undefining 是一种代码味道。这是为什么?另外,我在代码中看到了这一点(只是一个示例,显示了我在实际代码中的内容),这个编译,

if(x == 1000) {
#define MACRO_EXAMPLE 1
} else {
#define MACRO_EXAMPLE 1
}

但这不编译,

if(x == 1000) {
#define MACRO_EXAMPLE 1
} else {
#define MACRO_EXAMPLE 2
}

错误 warning C4005: 'MACRO_EXAMPLE' : macro redefinition

这是如何进行预处理的?它是如何工作的?

最佳答案

预处理发生在您的代码被分析之前。这意味着 if/else 被忽略并且

if(x == 1000) {
#define MACRO_EXAMPLE 1
} else {
#define MACRO_EXAMPLE 1
}

实际上被视为

#define MACRO_EXAMPLE 1
#define MACRO_EXAMPLE 1

这没关系,因为您使用了相同的值。另一方面

if(x == 1000) {
#define MACRO_EXAMPLE 1
} else {
#define MACRO_EXAMPLE 2
}

成为

#define MACRO_EXAMPLE 1
#define MACRO_EXAMPLE 2

因为宏的值已经改变,所以这是一个错误

关于c++ - 在 block 中#defining 真的是一种代码味道吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com