【问题标题】:c function returns an error - how to exit programc函数返回错误-如何退出程序
【发布时间】:2016-04-12 16:20:40
【问题描述】:

我在main 中调用 4 个函数,return 0 表示成功,return -1 表示失败。如果其中任何一个失败,我不想调用下一个函数,只需打印一条错误语句并退出。

我该如何实现呢?

int main(void)
{
deviceSync();
deviceInit();
devicesettings();
devicetakemeasurement();
}

【问题讨论】:

  • 在不知道 if/else 的情况下如何编写外部函数?
  • 我投票结束这个问题,因为 OP 根本不懂编程

标签: c return


【解决方案1】:

你的意思是这样的吗?

#define FAILURE -1

int main() {
    if ( FAILURE == deviceSync() ) {
        fputs("Device Sync failed\n",stderr);
        return EXIT_FAILURE;
    }
    if ( FAILURE == deviceInit() ) {
        fputs("Device Init failed\n",stderr);
        return EXIT_FAILURE;
    }
    if ( FAILURE == devicesettings() ) {
        fputs("Device setting failed\n",stderr);
        return EXIT_FAILURE;
    }
    if ( FAILURE == devicetakemeasurement() ) {
        fputs("Device take measurement failed\n",stderr);
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

【讨论】:

  • 按照惯例,C 程序在失败时返回预定义值 EXIT_FAILURE,在成功时返回 EXIT_SUCCESS
  • 但是 +1 是迄今为止坚持规范的唯一答案,即针对 -1 测试功能!
  • @alk 你是对的,更新了(希望以正确的方式)。谢谢。
【解决方案2】:

您需要为每个函数运行一个 if 语句

int main(void)
{
    if(deviceSync())return -1;
    if(deviceInit())return -1;
    //...
}

当函数返回非零时,这将返回 -1

编辑:对不起,我不应该把'no​​ts'放在那里

【讨论】:

  • !deviceSync() 确实成功了
  • 您将状态代码视为布尔值,使代码难以理解。 if( deviceSync() != 0 ) { ... } 会更清楚。
  • 该代码不仅针对-1 进行测试,还针对与0 不同的所有内容进行测试,这使得错误记录不明确。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多