【问题标题】:Check if an expression is an lvalue with the preprocessor使用预处理器检查表达式是否为左值
【发布时间】:2015-02-04 21:51:17
【问题描述】:

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

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

【问题讨论】:

  • 只是好奇,你为什么需要这个?
  • 我正在尝试使用预处理器宏创建lamba 表达式。传递参数时,我需要知道它是否是左值(然后我创建一个指针)(然后我只是传递值)。见stackoverflow.com/a/28332447/773690
  • 为什么不直接使用C++11 lambdas?
  • @RPGillespie 并破坏了乐趣? 没有

标签: c c-preprocessor


【解决方案1】:

没有。

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

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

【讨论】:

    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 2022-10-21
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    相关资源
    最近更新 更多