zoukankan      html  css  js  c++  java
  • C语言中带有返回类型的函数没有return语句的影响

    网上查资料发现C++编译器不允许这种做法,会报编译错误,但是C编译器如GCC一般不会报错,但返回的值不确定。

    自己写了简单的代码做了个试验,代码如下:

    #include <stdio.h>

    int a()
    {
      // printf("function a called\n");
    }

    int b()
    {
      // printf("function b called\n");
    }

    int main()
    {
      int a1 = a();
      int b1 = b();

      printf("a1=%d, b1=%d\n", a1, b1);
    }

    运行结果,当不放开注释时结果如下:

    当放开注释时结果如下:

    当方法a放开注释,方法b不放开注释时,结果如下:

    似乎函数返回的值总是相同的,而且范围只在0和1之间。

    又加了一个方法c,继续观察结果:

    #include <stdio.h>

    int a()
    {
    printf("function a called\n");
    }

    int b()
    {
    // printf("function b called\n");
    }

    int c()
    {
    //int c = 1 + 2;
    }

    int main()
    {
    int a1 = a();
    int b1 = b();
    int c1 = c();

    printf("a1=%d, b1=%d, c1=%d\n", a1, b1, c1);
    }

    编译执行结果为:

    将a方法的内容注释掉,编译执行结果为:

    似乎规律是只要有一个方法中有可执行的语句,所有方法都返回0,如果所有方法都是空方法(没有语句)就都返回1(目前尚不确定其他环境下是否也是相同结论)。

    目前还不清楚其中的原理,暂时记录实验现象。

  • 相关阅读:
    Django-4
    Django-3
    博客中涉及的源码下载
    源码阅读系列:EventBus
    使用DFA做文本编辑器的自动提示
    计算机网络-IP类型判断
    感兴趣的文章搜集
    The Engine Document of JustWeEngine
    [译文]选择使用正确的 Markdown Parser
    Android源码阅读-Filter过滤器
  • 原文地址:https://www.cnblogs.com/mobius2018/p/9844060.html
Copyright © 2011-2022 走看看