【问题标题】:Why do certain POSIX system calls return an integer instead of a boolean?为什么某些 POSIX 系统调用返回整数而不是布尔值?
【发布时间】:2018-12-13 09:04:30
【问题描述】:

在 POSIX.1-2017 规范的最新版本中,一些系统调用,如 link()/unlink()、access() 或 chmod() 返回 0(成功)或 -1(不成功) )。

在这种情况下,返回 boolean 在语义上不是更正确吗?

如果我将返回类型从int 更改为boolean,它是否仍然POSIX 兼容?

【问题讨论】:

    标签: integer boolean posix semantics


    【解决方案1】:

    我认为在所有返回整数值的函数中都有相似的返回类型。否则程序员应该每次检查该函数是否返回int 或boolean。

    最初bool 甚至不是 C 中的类型:我不知道它也是复古兼容性的选择。

    在某些情况下,您甚至没有选择:以以下为例:

    int fflush(FILE *fp) 返回:0 表示 OK,EOF 表示错误

    int fclose(FILE *fp); 返回:0 表示正常,EOF 表示错误

    int atexit(void (*func)(void)) 返回:0 表示正常,非零表示错误

    EOF 是一个宏,一般定义为-1,但不能保证。在其他一些情况下,您希望指定错误

    【讨论】:

    • 感谢您提供有用的答案。我看不到在需要时检查 API 中函数的返回类型的问题,但一致性也很有价值。 bool 不是该语言的早期部分,这让我感到非常惊讶,它的存在似乎很自然。
    • 欢迎您并希望它有所帮助,但应该对您的问题进行进一步研究(如果您发现有用的信息,请在此处分享:我很好奇)。如果它有用,请点赞这个问题
    猜你喜欢
    • 2015-02-19
    • 2013-08-10
    • 1970-01-01
    • 2020-01-17
    • 2017-08-27
    • 2020-03-21
    • 2020-05-12
    • 2012-03-25
    • 1970-01-01
    相关资源
    最近更新 更多