【问题标题】:Can someone please explain this macro definition?有人可以解释一下这个宏定义吗?
【发布时间】:2020-09-24 05:49:43
【问题描述】:

宏定义如下:

#define open_listen_fd_or_die(port) \
   ({ int rc = open_listen_fd(port); assert(rc >= 0); rc; })

open_listen_fd() 是一个函数,它返回整数值。
我的问题:第三个声明rc;有什么意义?

【问题讨论】:

  • @Shawn 所以,rc 的值会返回给宏的调用者。我说的对吗?
  • 是的……这些是可怕的、非标准的,永远不应该使用。请改用(内联)函数。
  • 这些宏肯定不优雅 0_0
  • @Yunnosch 现在我有时间写一个正确的答案了

标签: c gcc macros


【解决方案1】:

您正在查看一个 gcc 扩展,它允许您将多个语句视为一个表达式。最后一个需要是一个表达式,用作整个事物的结果。它旨在用于宏以允许临时变量的存在,但在现代 C 中,在这种情况和许多其他情况下,最好使用内联函数而不是类似宏的函数(不仅仅是因为这是非标准扩展和内联函数是标准的):

inline int open_listen_fd_or_die(int port) {
    int rc = open_listen_fd(port);
    assert(rc >= 0); // maybe not the best approach
    return rc;
}

更多信息可以在gcc documentation找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多