C语言中带有返回类型的函数没有return语句的影响

本文通过实验探讨了C++与C中函数在无明确返回语句时的默认行为,发现C++编译器禁止此行为,而C编译器如GCC则可能返回不确定的值,通常在0和1之间,且受函数内是否有可执行语句的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上查资料发现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(目前尚不确定其他环境下是否也是相同结论)。

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

 

转载于:https://www.cnblogs.com/mobius2018/p/9844060.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值