c - 无符号函数必须返回一些东西吗?

标签 c function unsigned

嘿,我正在做一个练习,我必须用 C 语言编写一个无符号函数,我有一个问题,我是否必须因为函数的类型而返回一些东西?还是可选的??

最佳答案

在正常使用中,任何声明返回值的函数都应该返回一个值。这很大程度上是一个良好的编程实践的问题。未能返回值通常是错误的迹象。然而,C 标准并不要求这样做,并且有两个异常(exception)。

C 2018 6.9.1 12 允许函数通过到达其代码末尾而不返回值来终止,前提是调用者不使用该函数的值:

Unless otherwise specified, if the } that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.

函数在某些情况下可能返回值而在其他情况下不返回的一种情况是,它被设计为根据命令执行各种不同的操作。例如:

unsigned DoSomething(int command, int parameters[])
{
    switch (command)
    {
        case GetSomething:
            …
            return Something;
        case RememberSomething;
            Something = parameters[0];
            …
            break;
    }
}

这样的设计可能容易出错,应该仔细考虑。由于函数被声明为返回一个值,程序员可能会期望它这样做,并在没有返回值的情况下无意中将函数的值分配给另一个对象,从而导致未定义的行为。

此外,函数可能根本不返回,并且有一个函数说明符用于显式告诉编译器情况如此,_Noreturn,如 6.7.4 中所指定。此行为通常仅在异常情况下使用。例如,标准函数 abortexit 终止程序,因此它们不会返回。当然,它们是用 void 声明的,因此它们不会返回任何内容。但是,您可能有一个在某些情况下调用 exit 并在其他情况下返回整数的函数。

关于c - 无符号函数必须返回一些东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106870/

相关文章:

c - 如何在C中循环socket程序

c - altivec 提取部分 vector ?

c - 如何在迷宫中打印从源到目标的 BFS 路径

PHP MySQL Top 5 Referers 函数

hex - 有符号十六进制减法与无符号

c# - Java 中的无符号运算符

c++ - 将需要默认字符未签名的代码移植到没有此要求的代码库

c - 使用 CJSON 解析的 JSON 中的第一个数字始终为 0

excel - 在其他公式中查找特定元素

function - Haskell 中无点函数的先决条件是什么