遇到第一个返回语句时函数执行不退出
Posted
技术标签:
【中文标题】遇到第一个返回语句时函数执行不退出【英文标题】:Function execution not exiting on encountering first return statement 【发布时间】:2012-09-24 22:28:26 【问题描述】:Buffer* b_create(int init_capacity, char inc_factor,char o_mode)
Buffer* buffer=NULL; /*local pointer to the buffer structure on heap*/
if (o_mode=='f' || inc_factor==0)
o_mode=0;
inc_factor=0;
else if (o_mode=='f' && inc_factor!=0)
o_mode=0;
inc_factor=0;
else if (o_mode=='a' && 1<=inc_factor<=255)
o_mode=1;
inc_factor=inc_factor;
else if (o_mode=='m' && 1<=inc_factor<=100)
o_mode=-1;
inc_factor=inc_factor;
else
buffer=NULL;
return buffer;
//throw a more meaningful error??
//cleanup :: how about i just call the ca_destroy() ??
/*
free(buffer->ca_head);
buffer->ca_head=NULL;
free(buffer);
buffer=NULL;
*/
buffer = (Buffer*)malloc(sizeof(Buffer));
buffer->ca_head=(char*)malloc(sizeof(char)*init_capacity);
buffer->mode=o_mode;
buffer->inc_factor=inc_factor;
buffer->capacity=init_capacity;
buffer->addc_offset=0;
buffer->mark_offset=0;
buffer->r_flag=0;
return buffer;
我有上述方法。我正在努力让它工作。首先,我检查并设置了几个变量。如果没有任何情况适用,那么我将缓冲区设置为 NULL 并尝试将值返回给调用函数。
else
buffer=NULL;
return buffer;
但是,在返回之后,函数会继续并继续创建缓冲区结构。我希望该函数一旦看到返回语句就会退出。为什么会继续执行??
【问题讨论】:
我经常有点太确定程序流程是否按照我认为的方式流动......验证是否达到了回报。要么在调试器中运行,要么在 buffer=NULL 之间放入 printf;和返回缓冲区;声明。1<=inc_factor<=100)
那样不行。
感谢加托!你说得很对。编程时不应该假设!
【参考方案1】:
这个条件
1<=inc_factor<=255
总是正确的。它被解析为(1 <= inc_factor) <= 255
,而1 <= inc_factor
的计算结果为0 或1。因此,如果o_mode
是'a'
或'm'
之一,则即使inc_factor
为0 或否定的。
查看条件链,我们发现:
if (o_mode=='f' || inc_factor==0)
o_mode=0;
inc_factor=0;
else if (o_mode=='f' && inc_factor!=0) // This is never true, because if o_mode == 'f',
o_mode=0; // the first one already was true
inc_factor=0;
else if (o_mode=='a' && 1<=inc_factor<=255) // This is just o_mode == 'a'
o_mode=1;
inc_factor=inc_factor;
else if (o_mode=='m' && 1<=inc_factor<=100) // This is just o_mode == 'm'
o_mode=-1;
inc_factor=inc_factor;
else // This is only reached if o_mode is none of 'f', 'a', 'm' and inc_factor is != 0
buffer=NULL;
return buffer;
但如果o_mode
不是'f', 'a', 'm'
和inc_factor != 0
,则到达最终的else
并返回NULL
。没有任何实现被破坏到足以忽略return
语句。
【讨论】:
以上是关于遇到第一个返回语句时函数执行不退出的主要内容,如果未能解决你的问题,请参考以下文章