0

这是在 C 中有效使用 NULL 还是有其他方法可以解决这个问题?

// Send data
// cb_push returns NULL if it is successful
char uart_send(char c) {
    void* ret = cb_push(w_buffer, &c);
    if (ret != NULL) return c;

    SETBIT(UCSR0B, UDRIE0);
    return NULL;
}

在Java中,我会这样做,但在CI中不知道什么是好的做法。

4

3 回答 3

2

它并没有真正定义,并且根据您使用的库和/或函数有不同的方法。一般来说,没有办法区分0and NULL(实际上,NULL通常只是一个扩展为 的预处理器宏0)。

通常,使用以下可能性,有时甚至根据用途在一个库中匹配:

  • 如果返回一个指针,返回值0通常表示某种错误。
  • 如果没有任何错误,带有状态码(或main入口点)的函数通常会返回。0
  • 0如果某些事情没有成功,则会返回一些函数(即它们返回一个布尔值)。
  • 一些 stdlib 字符串函数返回一个“荒谬”的值,以防出现错误(或未找到)。例如,如果找不到子字符串,std::string::find()将返回。-1然而,这被包裹/隐藏在一个名为 value ( std::string::npos) 的常量后面,以避免抛出“魔法值”。

有没有完美的方法?我不这么认为,但这真的取决于具体的用例。如果你返回一个指针,那么在出错的情况下返回 0 就完美了。如果您要返回状态代码,我会使用宏(类似于 Windows API)或枚举。甚至不用担心任何特定的值 - 只使用名称。

于 2012-10-29T22:02:13.503 回答
0

一般来说,C 约定是在成功时返回 0,否则返回负数。

此外,假设您的函数应该返回一些指针并且它没有这样做,那么约定是返回 NULL。

于 2012-10-29T21:53:08.950 回答
-1

NULL 在内部定义为#define NULL (void*)0指向内存第零位置的指针。

于 2019-09-06T12:52:02.867 回答