2 zindow Zindow 于 2017.01.06 01:51 提问

C:在一个void类型的函数里,return后跟一个有返回值的函数

int textf(int n)
{
printf("Textf:%d\n",n);
}
void text(int n)
{
printf("Text:%d\n",n);
return textf(n);
}
int main()
{
text(3);
return 0;
}
我这样程序可以正常运行,请问这个是跟编译器有关还是语法本身就允许的?
以及像text这样,如果return后面是跟一个表达式的话,
是只求其值而不返回吗?如果想这样跟一个函数,它实际上会调用那个函数而不会将函数的返回值返回吗?
以及我这样子递归在CODE BLOCKS里可以正常运行,同问这个是跟编译器有关吗:
void text(int n)
{
if(!n) return printf("END!\n");
printf("%d\n",n);
return text(n-1);
}
int main()
{
text(3);
return 0;
}

5个回答

zjn640322
zjn640322   2017.01.06 08:21
已采纳

我的网络上传图片受限,贴出编译时终端的报错信息如下

casanovaz:0106 ie$ cc -c returnTest.c
returnTest.c:6:1: warning: control reaches end of non-void function
[-Wreturn-type]
}
^
returnTest.c:10:5: error: void function 'text' should not return a value
[-Wreturn-type]
return textf(n);
^ ~~~~~~~~
1 warning and 1 error generated.

Zindow
Zindow 请问您用的是什么编译器发出的警告呢?
一年多之前 回复
Zindow
Zindow 那这样的意思是跟编译器有关咯?我这里用的code blocks,编译设置使用了-std=c99命令
一年多之前 回复
shadowfromsun
shadowfromsun   2017.01.06 09:25

你这段代码在VC 6下,我贴了一下,提示了2个错误。
 图片说明
在编码规范上所有函数都要有返回值,根据要求不同返回值不同,你这个应该是编辑器或者环境的问题,
返回值为void 的函数,return ;用左侧的方式去返回。其他的就返回规定类型的数据。

zjn640322
zjn640322   2017.01.06 08:21

按道理是不应该通过的,int textf(int n)函数应该又返回值,这个在语法上就已经错误了,编译时就该报错了,text(int n)这个返回值也是错误。
看看我编译时的提示的错误,这才是正常的嘛:

ai977313677
ai977313677   2017.01.06 08:54

void是禁止return的,编译器一般都不会通过,但我记得VC++6.0的void main可以return 0,但也就main函数编译能通过,其他的也都不行,void里面return是语法错误。

weixin_35863671
weixin_35863671   2017.01.07 11:28

void 类型,return后是无类型的 直接return;

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C中-void类型函数同样可以让函数有返回值
想知道 void类型函数怎样 才 能 让函数有多个返回值吗 ? 首先 你要会 C语言 , 然后 你要学过 指针 ,请看下面代码 指针的应用场景:    1)在被函数中可以修改主调函数中的变量的值    2)让函数可以有多个返回值 #include /** *  用指针让函数可
c语言中函数能返回一个数组吗
 不能直接返回一个数组,但是可以用其他方式实现类似功能。 方法1:利用全局变量      分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函
函数中有多个return?C语言中,一个函数可以有几个返回值?
在移植wifi的代码时,遇到了一些与下面类似的函数,这些函数中有不只一个return,这可是个新鲜的玩意儿: int func (int b) { int a=5; if (a>b) return a; else return b; return 0; }      原来C/C++ 中,reutrn语句是这样定义的:      通过在函
C++函数返回类型和return语句
定义return语句终止当前正在执行的函数并将控制权返回给调用该函数的地方。return语句有两种形式:return; return expression;无返回值的函数没有返回值的return语句只能用在返回类型是void 的函数中,返回void 的函数不要求必须有return 语句,编译器会自动的在最后一句后面隐式执行return。有返回值的函数基本知识如果函数有返回值,那么return 语句返
关于函数返回值的判断
1.关于void main 在C 和 C++ 中,不接收任何参数也不返回任何信息的函数原型为“void main(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回任何信息时可以把 main 函数定义成 void main(void) 。然而这是错误的!main 函数的返回值应该定义为 int 类型,C 和 C++ 标准中都是这样规定的。虽然在一些编译器中,void main
通过形参获得函数返回值的问题
我们经常会用到将一个参数在函数外部初始化,然后传入函数,函数给参数赋值后,我们在函数外部使用这个值,最开始学习c++的时候我们就知道这需要将参数以引用的方式传入,却没有更深层次的考虑这个方法的原因,为什么传指针就不行呢?其实这个问题更深层次的原因是形参也是一个变量,我们在将一个初始化好的参数传入函数时其实是将参数赋给形参,比如void copy1(char*data1){ char* valu
函数返回值存放在哪里?return到哪里?
有这么一个简单的程序: #include using namespace std; int func() {   int a = 1;   return a; } int main() {   int Val;   Val = func();   return 0; } 请教各位牛人,当一个函数返回局部变量的时候,函数调用一旦结束局部变量就会被销毁,上面的程序中=号操作是从哪取值赋给
node.js——在函数中返回另一个函数的一个目的
在阅读node.js项目源代码的时候,发现某个变量的定义如下: var example = function(){ var _id = 1; return function(){ if (_id === 9007199254740992) { _id = 32768; } return _id++;
程序猿之---C语言细节27(函数无参数时细节、函数默认返回int型证明、return默认还回值、void指针++操作)
函数无参数时细节、函数默认返回int型证明、return默认还回值、void指针++操作
c++中关于return的用法总结
 return是C++预定义的语句,它提供了种植函数执行的一种放大。当return语句提供了一个值时,这个值就成为函数的返回值.     turn,有必要提及主函数的定义。很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写