优雅的宏如果块

and*_*dre -4 c macros

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

if(feature_db(id)) {
    //new logic
else {
    //old logic
}
Run Code Online (Sandbox Code Playgroud)

我想用MACRO替换它.

FEATURE_ENABLE(feature_db, id)
    //new logic
FEATURE_DISABLE
    //old logic
END_FEATURE
Run Code Online (Sandbox Code Playgroud)

我想这样做是因为它更清楚地发生在何处以及它更明确地发生了什么.我想知道是否只有一般的更优雅的方法来做到这一点?

Kon*_*lph 8

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

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

if (feature_enabled(feature_db, id)) {
    …
} else {
    …
}
Run Code Online (Sandbox Code Playgroud)