第八课 goto 和void分析
遭人遗弃的goto
高手潜规则:禁用goto
项目经验:程序质量与goto的出现次数成反比
最后的判断:将goto打入冷宫
8-1 goto副作用分析
void的意义
void修饰函数返回值和参数
如果函数没有返回值,那么应该将其声明为void
如果函数没有参数,应该声明其参数为void
void修饰函数返回值和参数是为了表示“无”
#include <stdio.h>
f()
{
}
int main()
{
int i = f(1,2,3);
return 0;
}
不存在void变量
C语言没有定义void究竟是多大内存的别名,没有void的标尺
无法在内存中裁剪出void对应的变量
#include <stdio.h>
int main()
{
void var; //error
void array[5]; //error
void * pv;
return 0;
}
小贴士
ANSIC:标准C语言的规范
扩展C:在ANSIC的基础上进行了扩充
#include <stdio.h>
int main()
{
printf(“%d\n”, sizeof(void));
return 0;
}
上面的代码在ANSI C编译器中无法通过编译,但是对于支持GUN标准的gcc编译器而言是合法的。
void指针的意义
C语言规定只有相同类型的指针才可以相互赋值
void指针作为左值用于“接收”任意类型的指针
void指针作为右值使用时需要进行强制类型转换
8-2通过void实现MemSet函数
小结:
现代软件工程中禁用goto语句
void是一种抽象的数据类型
void类型不能用于定义变量
void类型用于声明函数无参数
void类型用于声明函数无返回值
可以定义void类型的指针
void*类型的指针可以接受任意类型的指针值