【发布时间】:2018-08-13 21:07:42
【问题描述】:
我正在用 C 语言实现一个队列,并遵循使用尽可能少的动态内存的一般建议,为我的节点设置以下内容:
struct qnode {
struct message_t message;
struct qnode* next;
};
struct message_t {
char prefix[BUF_SIZE];
char command[CMD_MAXLEN];
char params[MAX_PARAMS][BUF_SIZE];
};
由于我只处理 message_ts 而不是指向它们的指针,因此我的 dequeue 函数具有以下签名:
struct message_t dequeue(struct message_q* q);
如果出现错误(在我的情况下,如果队列为空怎么办),是否有关于从这种类型的函数返回什么的约定?现在,我返回一个 struct message_t,所有字段都设置为“0”。
我的另一种选择是在任何地方使用指向message_t 的指针,然后在出现错误时返回NULL。我想了解每种方法的优缺点,以及在我的具体案例中的一些最佳做法。
【问题讨论】:
-
约定是改成
bool dequeue(struct message_q* q, struct message_t* out) -
请参阅Error handling in C code 了解有关选项的全面讨论。您最好使用指示成功或失败的返回码并通过指针返回结果。
-
@JonathanLeffler 我认为这是重复的。你,看来,不是。为什么?
-
@Yunnosch:没有足够的信心单独使用 Mjölnir。它讨论了一般的错误策略,并且仅讨论了返回结构(而不是指向结构的指针)的巧合函数。但是,在其他人确认这是一个不错的重复选择后,我愿意将其关闭。
-
@JonathanLeffler 我明白了。我忘记了权力越大,责任越大(或者你当然有这种权力)。我非常尊重你不太早敲定的决定。我意识到我应该以接近投票的方式表达我的意见。