c - 如何在不存储到变量中的情况下针对多个值测试函数的返回值
问题描述
我怎么能做到这样的事情......
int main(void)
{
if (f(x) == (a || b))
{
puts("Success");
}
return (0);
}
如果 f(x) 的返回等于 a 或 b,这将打印 Success。我知道可以将它存储在一个变量中,但我的问题是:“这样的事情可以通过只调用一次 f(x) 函数而不使用变量来完成吗?”
编辑 1:我不允许为此分配使用 switch 语句
编辑 2:我可以设置一个只有这样一个表达式的范围吗?
if ( 2 < f(x) < 5)
这是否有效(返回类型为 int)?
解决方案
如何测试一次调用的函数的多个返回值而不存储到变量中(?)
不是真的,但有一些限制让我们滥用 C 并假设a, b
并f()
返回一个字符。
1形成一个由 和 组成的字符数组,a
并b
使用 搜索它memchr()
。受@David C. Rankin启发 (它不会将结果存储f()
在变量中,但会调用函数)
int main(void) {
// v-------------v compound literal
if (memchr((char [2]){a,b}, f(x), 2)) {
puts("Success");
}
return 0;
}
我看到 OP 添加了“返回类型是 int” - 哦,好吧。
if ( 2 < f(x) < 5)
是有效代码,但不符合 OP 的要求。
就像if ( (2 < f(x)) < 5)
whichf(x)
与 2 比较,结果是 0 或 1,总是小于 5。
今晚人潮汹涌,那么下面呢。需要一些用于int
溢出的扩展数学,但很接近。
abs(2*f(x) - (a+b)) == abs(a-b)
1对生产代码不认真的代码建议 - 使用临时代码。
推荐阅读
- javascript - 错误域=NSURLErrorDomain 代码=-1001 “请求超时。” UserInfo={_NSURLErrorFailingURLSessionTaskErrorKey=LocalDataPDTask
- java - Spring Boot AuthenticationManagerBean 不起作用
- javascript - 使用 JS ID 作为 html 中的背景图片 url
- typescript - 在 TS 中,为什么 number[][number] === number?
- python - 使用 web3.py 解码智能合约的返回值?
- c# - 如何从 Firebase unity c# 中的数据快照获取密钥?
- sql-server - 用户编辑由直通查询的结果过滤的链接 SQL Server 表
- swiftui - 如何将我的 SwiftUI 视图的 @State 交换为我的视图模型 @Published 变量?
- html - 如何在表格中显示嵌套 json 数组的数据
- node.js - 如何使用 nodejs、express、YouTube 数据 api 在我的网站上构建实时 Youtube 视频“喜欢”计数*无需刷新*