我目前正在开发一个通过数据库检查启用功能的系统。
if(feature_db(id)) {
//new logic
else {
//old logic
}
我想用MACRO替换它。
FEATURE_ENABLE(feature_db, id)
//new logic
FEATURE_DISABLE
//old logic
END_FEATURE
我想这样做,因为它们会更清楚地发生在哪里,更明确地发生了什么。我想知道是否只有一般的更优雅的方法来做到这一点?
答案 0 :(得分:8)
不,你的结果代码对于任何有能力的C程序员来说都不太清楚:C程序员知道if
和函数调用。他们不了解不遵循一般约定的自定义宏的语法和语义。因此,他们首先需要发现宏所做的事情,并确保以这种方式使用它们实际上是正确和安全的 - 这些都不是你的代码中显而易见的。
但是,您可以通过更好地命名函数并调整其参数来使您的初始代码更清晰,例如:
if (feature_enabled(feature_db, id)) {
…
} else {
…
}