gpt4 book ai didi

c - C 程序的意外退出代码(2 和 3)

转载 作者:行者123 更新时间:2023-12-04 19:30:15 27 4
gpt4 key购买 nike

我遇到了这个奇怪的问题,我无法真正弄清楚为什么会发生这种情况。注意:这些程序是在 centOS 上的 bash 命令行执行的。

我有两个类似的 C 程序:

file1.c

#include <stdio.h>

int main()
{
int a, b;
printf("Enter two nums\n");
scanf("%d %d", &a, &b);
printf("%d", a + b);
}

file2.cfile1.c 相同,但在第二个 printf 行中,它有 \n 位于格式字符串末尾。

它们是使用gcc file1.cgcc file2.c编译的。

据我所知,如果 C 程序成功执行并且没有错误或使用 return(X) 的特定退出代码,则该程序应返回 0,从而退出代码 0。

但是对于这两个文件,当我运行它们(并输入 2 个数字以满足 scanf)时,我分别获得退出代码 2 和 3。

进一步查找这些代码,我发现退出代码 2 意味着“滥用 shell 内置函数”,我不确定为什么会发生这种情况。至于退出代码3,我没有找到任何具体的东西,但由于它不为零,它表明某种错误,同样,我似乎无法在这些短程序中找到错误。

我正在使用键盘输入内容。例如。 '2[输入]2[输入]'并在运行程序后(当然是在编译它们之后)立即使用 echo $? 检查退出代码。看起来像这样。

$ ./a.out
Enter two nums
2
2
4$

重要说明:我无法在这些程序中添加“return 0”,我将它们作为最终产品,然后对其输出进行一些操作。所以我无法真正改变这些程序的任何内容。

希望得到您关于此问题的帮助。谢谢!

最佳答案

您收到的警告意味着您使用的是非常旧的 GCC 版本(最高版本为 4.9.4)进行构建,该版本默认为 C90 标准兼容模式(带有 GCC 扩展)。

C99 标准中添加了 main 函数的隐式返回。

由于 main 函数没有返回,因此您将出现未定义的行为

共有三种可能的解决方案:

  1. 升级到较新版本的 GCC(低于 12.1),默认至少为 C99 模式。
  2. 修改代码以添加从 main 函数显式返回
  3. 使用标志 -std=c99 进行构建,该标志告诉编译器根据 C99 标准进行构建

关于c - C 程序的意外退出代码(2 和 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72284163/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com