### C语言关键字浅析系列 ###
### ISO/ANSI C 关键字 ###
return关键字是C程序中最常见的关键字之一
对于一个最简单的demo程序,或者说你最早接触的HELLO WORLD程序,里面至少有两个你最早见到的关键字
int和return(注意,include不是C语言的关键字)
return的字面意思的“返回”,其常用在C语言的函数相互调用中
return的作用是:
表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值。
1、函数调用关系
C语言中一个很关键的语法结构就是函数,而函数可以相互调用,一个简单的函数调用过程大概是这样的:
函数常用于封装代码,就像个黑匣子,我们不需要知道里面的工作原理是怎样的,我们只知道,需要放什么东西进去,最后能得到什么
而最后能得到什么,这就需要函数中的return关键字了,通常它被视作函数返回主调函数的标志,意味着当前函数执行的结束
如果return用在循环或选择等嵌套结构中,则是比break更直接的退出方法:
/* 暴力跳出循环的例子 */
void fun(int a[])
{
int i;
for (i = 0;i < 10;i++)
{
if(a[i] < 0)
return; /* 判断到不合格条件,直接暴力返回,不执行后面的 */
……
}
……
}
/* 常用的函数中检查不合格时的返回 */
/* 一个Windows窗体程序,获取两个文本框中的数字(0-9),然后在另一个标签上显示其和 */
void getResult()
{
/* 获取文本框中的值 */
char a = getNumber1Text();
char b = getNumber2Text();
/* 检查获取到的文本 */
if (a == ' ' || b == ' ')
return; /* 无效字符,返回,无需再执行后面的部分 */
/* 转换类型,计算,显示到标签 */
}
2、return后面带的值
作为函数返回主调函数的标志,有时候函数在return时会带上一个值,而这个值与函数的类型有关
(1)void类型:void表示空、无,void函数是很常用的一种函数,这样的函数不返回任何值,但这个函数本身可以当做一组动作来封装
比如数据库中常见的增删改操作,其通常并不需要特定的返回值,只是一组规定动作,但这样的组合在一起的规定动作很多:
/* 对数据库表添加一项,不需要特定的返回值 */
void insert(id)
{
/*
按照定义,void类型的函数应该返回一个void值,或者叫return void;
但通常我们将其省略,所以常见的void函数最后没有return语句
但void函数中可以用return;来返回主调函数
*/
}
(2)常量、变量:如果需要函数返回一个结果,比如求和函数等计算类型函数,就需要根据函数的类型返回相应类型的值:
/* return常量,最常见的例子就是main函数 */
int main(void)
{
return 0; /* 0在系统中常表示函数正常执行完毕 */
}
/* return常量的另一个常见例子是返回bool类型值 */
bool bigger(int a, int b)
{
if (a > b)
return true; /* true和false不是C语言的关键字,但是保留字,表示bool的对/错常量 */
else
return false;
}
/* return变量常用于返回一种处理结果,如计算类函数 */
float addFloat(float a, float b)
{
float c;
c = a + b;
return c; /* 返回的变量的类型必须与函数类型一致 */
}
/* 创建类函数中也常见return变量,如创建新的结构体变量 */
struct node{int age;char sex;};
node * createNewNode()
{
node *p = new node;
p->age = 22;
p->sex = 'm';
return p; /* 指针类型也能作为返回值 */
}
(3)表达式:表达式也能被return,但按优先级会让表达式先计算,然后其实就是返回结果,有时return表达式会更简练:
/* bigger函数的优化 */
bool bigger(int a, int b)
{
return (a > b) ? true : false;
}
/* addFloat函数的优化 */
float addFloat(float a, float b)
{
return a + b;
}
/* 函数也是表达式 */
float addFloat(float a, float b)
{
return addFloat(a + b, a - b);
}
——参考《C Primer Plus第五版》