c - 函数不会返回 0,找不到逻辑错误

标签 c function pointers while-loop return

我不确定为什么下面的代码不起作用。

我尝试使用 gcc 编译它 gcc -Wall -o test test.c,它给我警告信息:control reaches end of non void function。

但我找不到错误,所以我尝试忽略警告消息进行编译,并在使用 gcc -o test 编译后使用 ./test 1234321 测试程序ispalidrome.c

但是它没有返回 0(根据我的理解,它应该返回 1,因为它没有触发任何 if 语句返回 1),而是返回一个随机值,46、52、84 等。

程序背后的主要逻辑完全符合要求,我只是不知道为什么它没有正常退出。

#include <stdio.h>
int main(int argc, char **argv){
    if (argc != 2){
        fprintf(stderr,  "Usage: %s \"string\"", argv[0]);
        return 1;
    }
    else{
        int i = 0;
        while( '\0' != argv[1][i] ) i++;
        char *start=argv[1];
        char *end=&start[i-1];

        while (start<end){
            if (*start != *end){
                break;
                return 1;
            }
            printf("%c is the same as %c\n",*start, *end);
            start =start+1;
            end=end-1; 
        }
    }
}

最佳答案

您的 main 函数很明显在末尾缺少一个 return 0

main 返回时,它返回的随机值是返回值寄存器(x86 上的 eax)中的任何值。

切勿关闭 -Wall,切勿忽略警告。他们是你的 friend 。


作为Jim BalterLưu Vĩnh Phúc提到,return 0 is optional in C99 .

关于c - 函数不会返回 0,找不到逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22006084/

相关文章:

c - fpos_t 类型变量的格式说明符?

c++ - 在 C++ 中,如果两个不同的函数声明同一个静态变量会怎样?

c - 在加载运行器脚本中将特定值作为参数传递

c - 双链表。我做的好吗?

Javascript/Jquery-如何检查函数是否返回任何值?

function - Azure 函数 Blob 存储日期时间输出路径

c - 这是释放作为结构一部分的多个动态分配数组的正确方法吗?

python - 使用 char 指针函数和 std::string 调用线程会产生不同的结果

string - 具有 PWideChar 参数的函数仅采用第一个字符

c - C中赋值期间的隐式转换?