goto关键字
一、goto关键字#include <stdio.h>
int main()
{
int a = 10;
start://冒号记得要加
printf("%d\n", a);
if (a > 0)
{
printf("hello\n");
}
goto start;
return 0;
}
goto关键字使用注意事项:goto语句只能用于在当前函数内部进行跳转,不能跨函数或跳出函数
二、void关键字
void本身就被解释为空类型,强制不允许定义变量,因为大小不明确
不允许强制类型转化 int a = (void)10写法错误
C语言中,函数可以不带返回类型,此时默认返回值是int,比如定义函数:add()此函数没带返回类型,默认返回int,并且默认函数不需要参数
add(void)明确函数不需要参数,如果一个函数没有参数,将参数列表设置成void,是一个不错的习惯,因为可以将错误明确提前发现
void修饰函数返回值时,①:占位符,让用户明确不需要返回值 ②:告知编译器此返回值无法接受
void*
void* 可以定义变量,因为是指针,类型明确,大小为4/8个字节
void* 能被任何类型的指针接收
void* 能接收任意类型的指针(常用)
void* 的指针不能解引用,不能加减
在vs中sizeof(void)为0,而在Linux中sizeof(void)为1可以解引用和加减运算(了解)
滥用 goto 会打乱代码的自然流程,使得逻辑难以追踪。 在大多数情况下,可以使用条件语句(if-else、switch)、循环控制语句(break、continue)和函数调用来代替goto语句。 虽然goto关键字在某些特定情况下可能是有用的,但通常情况下最好避免使用它。在使用goto时,务必谨慎考虑其对代码可读性、可维护性和调试难度的影响。 在使用goto语句时,要注意资源的释放问题。例如,在文件操作或动态内存分配后,如果发生错误需要跳转到错误处理代码段,应确保在跳转前释放已分配的资源,避免内存泄漏或文件占用。 如果必须使用 goto,尽量限制在简单的跳转,比如跳出多层循环。
避免跨函数使用 goto。 使用goto集中处理错误,避免了重复的资源释放代码,提高了代码的清晰度。 在 goto 跳转前后避免修改同一个变量,因为这可能会导致状态不一致。 在大多数情况下,可以使用更结构化的控制流语句(如if-else、while、for、switch-case等)来替代goto。这些语句通常更容易理解和维护。 如果确实需要使用goto语句,请确保使用有意义的标签名称,以增加代码的可读性。
避免在嵌套结构中使用goto,以免使程序逻辑难以理解。 不恰当的跳转可能导致程序逻辑错误,引入难以发现的bug 合理使用 goto 可以提高代码效率,但过度依赖会严重影响代码质量。建议遵循“能用其他方式解决的,绝不使用 goto”的原则。 尽可能使用if、else、for、while等结构化语句替代goto,提高代码的可读性和可维护性 goto语句可能导致程序结构不清晰,容易引入bug,特别是在较大的代码库中。因此,应尽量避免滥用goto语句,除非有特殊的需求或优势。 跳转不会越过变量的声明和初始化语句,防止变量未定义或未初始化 在多层函数调用中快速终止并返回。 将复杂逻辑封装到函数中,通过函数调用实现跳转,避免使用goto。 频繁使用goto会导致代码结构混乱,难以跟踪程序执行流程,增加调试和维护难度 在C语言中,标签是局部的,无法在函数之间共享。因此,标签的作用域仅限于定义它们的代码块内。这意味着goto语句只能在一个函数内部跳转,不允许跳转出一个函数外部。 goto 可能直接跳过关键代码