优雅的宏如果块

时间:2016-11-08 17:30:45

标签: c macros

我目前正在开发一个通过数据库检查启用功能的系统。

if(feature_db(id)) {
    //new logic
else {
    //old logic
}

我想用MACRO替换它。

FEATURE_ENABLE(feature_db, id)
    //new logic
FEATURE_DISABLE
    //old logic
END_FEATURE

我想这样做,因为它们会更清楚地发生在哪里,更明确地发生了什么。我想知道是否只有一般的更优雅的方法来做到这一点?

1 个答案:

答案 0 :(得分:8)

不,你的结果代码对于任何有能力的C程序员来说都不太清楚:C程序员知道if和函数调用。他们不了解不遵循一般约定的自定义宏的语法和语义。因此,他们首先需要发现宏所做的事情,并确保以这种方式使用它们实际上是正确和安全的 - 这些都不是你的代码中显而易见的。

但是,您可以通过更好地命名函数并调整其参数来使您的初始代码更清晰,例如:

if (feature_enabled(feature_db, id)) {
    …
} else {
    …
}