【问题标题】:function return type decision [duplicate]函数返回类型决策
【发布时间】:2018-03-19 09:43:11
【问题描述】:

用于我的家庭自动化项目的小微控制器 (arduino) 监听引脚高低状态变化。当引脚状态发生变化时,

函数的调用如下:

  NotSureYet  sendMessageOnPinChange(8, "You turned on the kitchen lights ");

退货

  • 该函数将检查它是否被调用时 第一个参数是一个 integer 范围从 0 到 16,否则它返回“错误”(例如:你应该使用...之间的数字)
  • 该函数检查第二个参数是否为 char *(字符串)类型,否则返回错误 (例如:消息不是字符串)
  • 该函数还会返回消息是否“发送”正确

问题 返回类型 NotSureYet 是什么?

当它返回“消息发送成功”时,这不是错误,而在任何其他情况下,它返回“错误整数”或“错误消息”或... 所以我不是在寻找错误检查,我在寻找'NOT_SURE_YET'的返回类型

【问题讨论】:

  • 在 C 中不能在运行时检查类型。
  • 您看到这么多项目实际上这样做是有充分理由的:P 因为 C 语言级别非常低,您必须自己构建所有内容,包括复杂的错误检查。
  • @melpomene 关于编译时与运行时检查也是正确的。任何范围检查等也必须由您构建:P
  • @Ahmed Masud:那么你将如何从这个函数返回,你会返回你自己的“错误”结构吗?
  • @hewi 通常 int 仍在 C 中使用,因为 int 很小并且保留在 CPU 寄存器中。例如,您可以将错误编码为 int 中的位,然后附带一串错误消息。这就是 errno/perror 所做的......只需遵循相同的配方即可。事实上,您可以augment perror/strerror 并使用errno。这样,任何系统错误都会定期出现,并且您自己的错误也会出现。如果您想捕获复杂的数据,请创建一个捕获更多信息的报告结构。恕我直言,保持简单,错误处理本身不应导致错误。 :)

标签: c function return


【解决方案1】:

您将返回一个包含两个成员的结构。

typedef struct {
    const char *error_str;
    bool success;
} NotSureYet;

注意:我没有尝试编译它,但它应该可以工作。

【讨论】:

  • 所以基本上我需要创建自己的错误返回类型,是否有模板、指南、最佳实践?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 2021-10-20
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多