我应该返回0或1以获得成功的功能吗?

ziq*_*ziq 50 c boolean

可能重复:
C代码中的错误处理您应该在C中
使用失败的函数调用返回什么值?

我总是用0,但其没有真正可读if,while

我应该退回1吗?为什么主要功能return 0成功?

m0s*_*it0 47

它由C标准定义0为成功(信用转到hvd).

为了获得更好的可移植性,您可以分别使用宏EXIT_SUCCESSEXIT_FAILURE常规状态值来表示成功和失败.它们在文件中声明stdlib.h.

(我说的是从main,exit或类似的调用返回给操作系统的值)

至于你的功能,只要你沿着你的程序保持这种方式,就可以返回你想要的内容并使代码更具可读性.

  • @AndrewMarshall从C标准:"最后,控制返回到主机环境.如果status的值为零或EXIT_SUCCESS,则返回状态成功终止的实现定义形式." (这是`exit`函数描述的一部分,使用相同的代码.) (6认同)
  • @AndrewMarshall`EXIT_SUCCESS`可能有一些除0之外的其他值,但即使这样,`return 0;`**也表示成功. (2认同)
  • @AndrewMarshall `EXIT_FAILURE` 不允许为 0,因为从 main *always* 返回 0 意味着成功。 (2认同)
  • @hvd:确实,这在 C99 7.20.4.3.5 中有所暗示。 (2认同)

Lin*_*cer 16

main使用0表示成功的原因是它被用作操作系统的应用程序的退出代码,其中0通常表示成功,1(或更高)表示失败.(当然,您应该始终使用预定义的宏EXIT_SUCCESSEXIT_FAILURE.)

但是,在应用程序内部,使用零表示失败并且非零表示成功更自然,因为返回值可以直接用于if:

if (my_func())
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • “然而,在应用程序内部,更自然的是使用零表示失败,使用非零表示成功,因为返回值可以直接在 if 中使用,如下所示:”我强烈反对这一点,只需添加一个“!” 不仅解决了问题,而且总是返回 0 表示成功更加清晰和标准。如果操作系统遵循它,c标准函数遵循它,互联网上的大多数代码遵循它,这会让读者感到困惑。 (11认同)