使用预处理器检查表达式是否为左值

Check if an expression is an lvalue with the preprocessor

是否有使用 C 预处理器检查表达式是否为 lvalue (meaning I can do &expression) 的宏?

示例: 如果有一些 int a; 并且我调用 IS_LVALUE(a) 它应该评估为 1,而 IS_LVALUE(5) 应该评估为 0 , 所以我可以做 #if IS_LVALUE(...) == 1

没有

因为 C 预处理器不知道左值是什么,或者与此相关的任何其他 C 构造。那是编译器的工作。

如果你在 C++ 中,你可以使用类型特征,但在 C 中,恐怕你运气不好。