【问题标题】:Are signal macros from signal.h object-like or function-like macros?signal.h 中的信号宏是类对象宏还是类函数宏?
【发布时间】:2021-02-05 06:30:46
【问题描述】:

在 C 的 signal.h 头文件中定义了一堆宏(例如 SIGCONTSIGKILL)。

这些是类对象宏还是类函数宏?怎么知道?

免责声明:C 编程非常新。

【问题讨论】:

  • 您参考的标准说 "[e]ach [信号常数] 具有不同的正整数值。" 这是否回答了您的问题?
  • 对您而言,类对象和类函数之间的区别是什么? C 预处理器只是一个简单的搜索和替换机器,在语法上与 C 无关。
  • @thebusybee:一个区别是类似函数的宏可以通过用括号括起来在本地被抑制; (putchar)(c) 不会被宏替换,而 putchar(c) 会。预处理不仅仅是搜索和替换。即使忽略宏替换以外的功能(例如条件包含,包括评估表达式,或pragma 指令),宏替换也会按照 C 标准中的规定解析语法标记并执行 in中定义的其他计算> C 标准,不是单独的。
  • @EricPostpischil 哦,对了,我忘记了……好吧……效果,我只考虑了宏工具。然而,尽管标准定义了预处理器,并且它恰好进行了类似的标记,它仍然有自己的语法。在许多编译器系统中,预处理器甚至是一个单独的程序。所以我的问题是:它对SIGKILL 的宏有什么影响?

标签: c macros signals header-files


【解决方案1】:

SIGCONTSIGKILL 是类对象宏。

定义和使用的宏在它们之后带有括号参数,例如:

#define max(a, b) ((a) < (b) ? (b) : (a))

是类似函数的宏,仅仅是因为它们像函数一样使用参数。没有带括号的参数定义和使用的宏,例如:

#define c 299792458. // Speed of light / (m/s).

是类对象宏,因为它们更像普通变量(在 C 标准的术语中表示 对象)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2015-08-04
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多