c - 无符号函数必须返回一些东西吗?
问题描述
嘿,我正在做一个练习,我必须在 C 中编写一个无符号函数,我有一个问题,由于函数的类型,我是否必须返回一些东西?还是可选的??
解决方案
在正常使用中,任何声明返回值的函数都应该返回一个值。这在很大程度上是一个良好的编程实践问题。未能返回值通常是错误的标志。但是,这不是 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 中所指定。此行为通常仅在异常情况下使用。例如,标准函数abort
和exit
终止程序,所以它们不返回。当然,它们是用 声明的void
,所以它们永远不会返回任何东西。但是,您可能有一个在某些情况下调用exit
并在其他情况下返回整数的函数。
推荐阅读
- asp.net-core - IdentityServer4.AccessTokenValidation 与授权在同一个项目中
- javascript - React-chart-js 标签数据返回 3 次,标签不正确。有什么修复吗?
- kubernetes - GKE 私有集群中的 GitLab CI 无法连接到主集群
- android - 无法使用单个搜索视图执行搜索建议和搜索操作
- python - 无法从气流 pod 中提取 xcom - Kubernetes Pod Operator
- prolog - 序言中的素数检查器
- ios - 我们如何在 iOS 12 中添加文字转语音功能?
- django - Elasticbeanstalk django 项目部署解耦链接错误
- sql-server - 如何从 WordPress 中的 SQL 服务器调用数据库详细信息
- php - 将新内容附加到现有内容