【问题标题】:Change return of function in c在c中更改函数的返回
【发布时间】:2025-12-29 04:30:12
【问题描述】:

所以我有一个 function1,它返回 0 或 1。

我有一个 function2,它接收 function1 作为参数。现在,在某些情况下,我想在 function2 中正常使用 function1,所以我只需调用 function2(function1);

在其他情况下,我想在函数 2 中使用 function1,但我希望 function2 在返回 0 时从 function1 接收 1,并在返回 1 时从 function1 接收 0。

也就是说,如果函数 1 返回 0,则 function2 得到 1。如果函数 1 返回 1,则 function2 得到 0。

我尝试使用 XOR(function2(function1 ^1);) 进行调用,但这似乎不起作用。

有什么想法吗?

PS:我知道这听起来可能令人困惑,对此我深表歉意。

编辑:
对不起大家,忘了说function2接收到一个函数的指针,而不仅仅是function1的结果。

【问题讨论】:

  • 你可以写在function2中: int ret = 1-function1();如果 function1() 返回 1,则 ret 将为 1-1=0。如果 function1 返回 0,则 ret 将为 1-0=1。
  • 确保您使用括号来实际调用函数 1:function1()。只要 function1 返回 0 或 1,您的 xor 就应该工作。您也可以使用 !(逻辑上不是)。
  • 你说的这似乎不起作用是什么意思?什么错误信息?它是编译,还是不产生正确的结果?而function2(function1) 是调用function1 的无效C 语法。
  • 实际上....function2(function1) 将在gcc 中编译,并警告您正在从一个指针转换为没有转换的整数。
  • 创建一个否定结果的包装函数。将包装器作为参数传递。

标签: c return boolean xor


【解决方案1】:

您可能想向function2 传递一个参数,告诉它如何解释function1 的返回值。

假设你的函数定义如下:

int function1(void);
void function2(int (*func)(void), int normalReturn);

那么在function2里面,你可以这样做:

int result;
if (normalReturn) {
    result = func();
} else {
    result = !func();
}

然后您可以像正常使用一样拨打function2

function2(function1, 0);

像这样倒置使用:

function2(function1, 1);

【讨论】:

  • function2(int (*func)(void), ...)
  • 谢谢,虽然我认为我不需要更改function2,就像我调用它的方式一样,这行得通!
  • @RuiLoureiro 很高兴我能帮上忙。如果您觉得有用,请随时 accept this answer
【解决方案2】:

正如 Karoly Horvath 在 cmets 中提到的,您可以创建一个调用 function1 并反转其返回值的“包装”函数。这样就避免了修改function2:

int function1_neg(void)
{
    return function1() ^ 1;
}

...

function2(function1_neg);

【讨论】: