首页 > 解决方案 > 无符号函数必须返回一些东西吗?

问题描述

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

标签: cfunctionunsigned

解决方案


在正常使用中,任何声明返回值的函数都应该返回一个值。这在很大程度上是一个良好的编程实践问题。未能返回值通常是错误的标志。但是,这不是 C 标准所要求的,并且有两个例外。

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

除非另有说明,否则如果}到达终止函数的 ,并且调用者使用函数调用的值,则行为未定义。

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

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并在其他情况下返回整数的函数。


推荐阅读