返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言详细分析讲解关键字goto与void的作用
  • 784
分享到

C语言详细分析讲解关键字goto与void的作用

2024-04-02 19:04:59 784人浏览 薄情痞子
摘要

目录一、关于Goto二、void 的意义三、小结一、关于goto 高手潜规则:禁用 goto项目经验:程序质量与 goto 的出现次数成反比最后的判决:将 goto 打入冷宫 下面看

一、关于goto

  • 高手潜规则:禁用 goto
  • 项目经验:程序质量与 goto 的出现次数成反比
  • 最后的判决:将 goto 打入冷宫

下面看一段 goto 副作用分析的代码:

#include <stdio.h>
#include <malloc.h>
void func(int n)
{
    int* p = NULL;
 
    if(  n < 0 )
    {
        goto STATUS;
    }
    p = (int*)malloc(sizeof(int) * n);
    
STATUS:
    p[0] = n;    
    
    free(p);
}
 
int main()
{  
    printf("begin...\n");
    
    printf("func(1)\n");
    
    func(1);
    
    printf("func(-1)\n");
    
    func(-1);
    
    printf("end...\n");
    
    return 0;
}

下面为输出结果:

这段代码中当 func 的入口参数 n 的值小于 0 时,就会 goto 到STATUS 那里去执行代码,但是由于跳过了分配内存环节,就不能把 n 的值赋给 p[0],强行赋值就会发成段错误。

二、void 的意义

void 修饰函数返回值和参数

  • 如果函数没有返回值,那么应该将其声明为 void
  • 如果函数没有参数,应该声明其参数为 void

void 修饰函数返回值和参数是为了表示“无”

下面这段代码就表示 f 函数的输入参数没有限制。

不存在 void 变量

  • C语言没有定义 void 究竟是多大内存的别名
  • 没有 void 的标尺
  • 无法在内存中裁剪出 void 对应的变量

在下面的代码中,只有 void* 那条语句可以编译通过,因为 void* 指针是合法的。

小贴士

  • ANSI C:标准 C 语言的规范
  • 扩展C:在 ANSI C 的基础上进行了扩充

上面的代码在 ASNI C编译器中无法通过编译,但是对于支持 GNU 标准的 GCc 编译器而言是合法的。

void 指针的意义

  • C 语言规定只有相同类型的指针才可以相互赋值
  • void* 指针作为左值用于“接收”任意类型的指针
  • void* 指针作为右值使用时需要进行强制类型转换

下面看一段通过 void* 实现 MemSet 函数的代码:

#include <stdio.h>
void MemSet(void* src, int length, unsigned char n)
{
    unsigned char* p = (unsigned char*)src;
    int i = 0;
    for(i=0; i<length; i++)
    {
        p[i] = n;
    }
}
int main()
{
    int a[5];
    int i = 0;
    MemSet(a, sizeof(a), 0);
    for(i=0; i<5; i++)
    {
        printf("%d\n", a[i]);
    }
    return 0;
}

下面为输出结果:

void* 定义的 src 表示可以接收任意类型的指针,所以数组 a 可以是任意类型。

三、小结

  • 现代软件工程中禁用 goto 语句
  • void 是一种抽象的数据类型
  • void 类型不能用于定义变量
  • void 类型用于声明函数无参数
  • void 类型用于声明函数无返回值
  • 可以定义 void* 类型的指针
  • void* 类型的指针可以接受任意类型的指针值

到此这篇关于C语言详细分析讲解关键字goto与void的作用的文章就介绍到这了,更多相关C语言goto与void内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言详细分析讲解关键字goto与void的作用

本文链接: https://lsjlt.com/news/146599.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言详细分析讲解关键字goto与void的作用
    目录一、关于goto二、void 的意义三、小结一、关于goto 高手潜规则:禁用 goto项目经验:程序质量与 goto 的出现次数成反比最后的判决:将 goto 打入冷宫 下面看...
    99+
    2024-04-02
  • C语言详细分析讲解关键字const与volatile的用法
    目录一、const 只读变量二、const 全局变量的分歧三、const 的本质四、const 修饰函数参数和返回值五、volatile 解析六、小结一、const 只读变量 con...
    99+
    2024-04-02
  • C语言详细分析讲解关键字enum与sizeof及typedef的用法
    目录一、枚举类型的使用方法二、sizeof 关键字的用法三、typedef 的意义四、小结一、枚举类型的使用方法 enum 是 C 语言中的一种自定义类型enum 值是可以根据需要自...
    99+
    2024-04-02
  • 如何分析C语言关键字中的void、const和return
    这篇文章将为大家详细讲解有关如何分析C语言关键字中的void、const和return,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。return首先我们弄清楚c语言内存分配的方式然后我们看一...
    99+
    2023-06-22
  • C语言中go是关键字吗?详细解析
    标题:C语言中go是关键字吗?详细解析 在C语言中,"go"并不是一个关键字。C语言的关键字是由C标准规定的,用于表示特定的语法结构或者功能,在编译器中有特殊的含义,不能被用作标识符或...
    99+
    2024-04-02
  • Java超详细分析讲解final关键字的用法
    目录基本介绍final细节01final细节02基本介绍 final 可以修饰类、属性、方法和局部变量. 在某些情况下,程序员可能有以下需求,就会使用到final: Base Sub...
    99+
    2024-04-02
  • C语言全面细致精讲关键字的使用
    目录1、switch 深入理解2、如何正确的使用 case3、循环语句while for do while深度讲解4、continue的作用是什么5、goto真的没人用了吗6、voi...
    99+
    2024-04-02
  • C语言详细分析讲解struct与union使用方法
    目录一、struct 的小秘密二、结构体与柔性数组三、C语言中的 union四、小结一、struct 的小秘密 C语言中的 struct 可以看作变量的集合 struct ...
    99+
    2024-04-02
  • C语言volatile关键字的作用与示例
    目录写在前面volatile和内联汇编的volatile的选择写在前面 版本信息:Linux操作系统,x86架构,Linux操作系统下GCC9.3.1版本。GCC 9.3.0手册。 ...
    99+
    2023-05-15
    C语言volatile关键字 C语言volatile
  • C语言中volatile关键字的详细介绍
    这篇文章主要讲解了“C语言中volatile关键字的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中volatile关键字的详细介绍”吧!1. 什么是volatile关键字?v...
    99+
    2023-06-20
  • C语言中volatile关键字的深入讲解
    1. 什么是volatile关键字? volatile用于声明一个变量,告诉编译器该变量值容易发生改变,在编译、读取、存储该变量的时候都不要做任何优化,因此编译后的程序每次需要存储...
    99+
    2024-04-02
  • c语言static关键字用法详解
    目录1.static修饰全局变量2.static修饰函数3.static修饰局部变量总结:1.static修饰全局变量 我们创建两个源文件,一个test.c,一个main.c 现在...
    99+
    2024-04-02
  • C语言详细分析讲解流程控制语句用法
    目录一、分支语句1.if语句2.switch语句二、循环语句1.for语句2.break和continue语句3.循环嵌套4.while和do…while语句一、分支语...
    99+
    2024-04-02
  • 详解C语言中的Static关键字
    一、static关键字的基本含义 首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存类型 1.局部变量:在任意一个函数内部定义的变量(不加sta...
    99+
    2024-04-02
  • C语言详解关键字sizeof与unsigned及signed的用法
    目录最冤枉的关键字sizeof理解被误解为函数sizeof(int)*p 表示什么意思signed与unsigned 关键字有符号整数vs无符号整数整形在内存的存储原码反码补码存储的...
    99+
    2024-04-02
  • C语言的static关键字应用实例分析
    这篇文章主要介绍“C语言的static关键字应用实例分析”,在日常操作中,相信很多人在C语言的static关键字应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言的static关键字应用实例分析...
    99+
    2023-06-30
  • C语言详细讲解二分查找用法
    目录【力扣题号】704.二分查找 力扣题目链接 示例 1: 输入: nums = [-1,0,3,5,9,12], target = 9     输出:...
    99+
    2024-04-02
  • c语言中typedef关键字的作用
    c语言中typedef关键字的作用是定义类型别名。它创建已存在数据类型的新名称,增强代码可读性和可维护性,包括:创建类型别名数据类型重用增强代码可读性提高代码可维护性 C语言中type...
    99+
    2024-05-10
    c语言 代码可读性 typedef
  • c语言中const关键字的作用
    const关键字在c语言中用于修饰变量或函数,使其值或行为在程序执行期间保持不变。它可以修饰变量(使其成为常量),防止意外修改数据,提高程序安全性。此外,const还可以修饰函数,确保其...
    99+
    2024-05-10
    c语言 敏感数据 代码可读性
  • c语言中extern关键字的作用
    extern 关键字用于声明其他源文件中定义的变量、函数或符号,告知编译器它们不是在当前源文件中定义的。它用于:向当前源文件中的其他函数提供对外部符号的访问权限。链接不同源文件时,确保符...
    99+
    2024-05-10
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作