【问题标题】:Is it possible to pass a return value from a function as the return value of the main function in C? [closed]是否可以将函数的返回值作为 C 中主函数的返回值传递? [关闭]
【发布时间】:2020-10-30 23:36:31
【问题描述】:

我的程序(到目前为止)应该检查是否正好有一个额外的命令行参数。如果不是这种情况,我的 main 函数应该返回 1。出于可读性原因,我决定将检查外包给另一个函数。问题是,我不知道如何使主函数返回与辅助函数相同的值。我的代码如下:

int main(int argc, char *argv[])
{
    checkNumberOfArguments(argc);
    return 0;
}

int checkNumberOfArguments(int argc)
{
    if (argc != 2)
    {
        printf("Error");
        return 1;
    }
    return 0;
}

我怎样才能以优雅的方式解决这个问题?

【问题讨论】:

  • return checkNumberOfArguments(argc); 是正常的方式。我不知道这是不是优雅
  • 那行得通,谢谢@MikeCAT。问题是,当我扩展程序以做更多事情时,main 的返回值将固定为该特定函数的返回值。还有其他解决办法吗?
  • 喜欢int ret = checkNumberOfArguments(argc); return ret;?似乎这里写的唯一条件是“主函数返回与辅助函数相同的值”。你有什么问题?

标签: c command-line-arguments return-value


【解决方案1】:

保存函数的返回值。如果不为零,则返回,否则继续。

int main(int argc, char *argv[])
{
    int rval = checkNumberOfArguments(argc);
    if (rval != 0) {
        return rval;
    }
    ...
    return 0;
}

【讨论】:

    【解决方案2】:

    从对main的初始调用返回被定义为“等效于以main函数返回的值作为参数调用exit函数”(C 2018 5.1.2.2.3 1)。因此,要获得与从初始调用返回具有值xmain 相同的效果,您需要做的就是调用exit(x)

    #include <stdlib.h> // To declare “exit”.
    
    int checkNumberOfArguments(int argc)
    {
        if (argc != 2)
        {
            printf("Error");
            exit(1);
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 2013-09-20
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多