当前位置: 首页 > news >正文

C语言类型转换与错误处理

类型转换

基本概念

将一种数据类型转换为另一种数据类型称为类型转换。C语言支持两种类型转换方式:显式转换隐式转换

显式类型转换(强制转换)

使用强制转换运算符将值从一种类型显式转换为另一种类型:

c

(type_name) expression

示例:

c

#include <stdio.h>int main() {int sum = 17, count = 5;double mean;mean = (double) sum / count;printf("Value of mean : %f\n", mean);return 0;
}

注意: 强制转换运算符的优先级高于除法运算符,因此sum的值首先转换为double类型,然后进行除法运算。

隐式类型转换

1. 整型提升

整型提升是将小于intunsigned int的整数类型值转换为intunsigned int的过程。

示例:

c

#include <stdio.h>int main() {int i = 17;char c = 'c';  // ASCII值为99int sum;sum = i + c;printf("Value of sum : %d\n", sum);  // 输出116return 0;
}
2. 通常的算术转换

编译器隐式执行算术转换,将操作数转换为共同的类型。转换规则如下:

  • 首先执行整型提升

  • 如果操作数类型仍不同,则转换为层次结构中出现的最高类型

示例:

c

#include <stdio.h>int main() {int i = 17;char c = 'c';float sum;sum = i + c;printf("Value of sum : %f\n", sum);  // 输出116.000000return 0;
}

错误处理

基本概念

C语言通过返回值提供错误处理支持。大多数函数在出现错误时返回-1或NULL,并设置全局错误代码errno

错误处理函数

errno, perror()和strerror()
  • perror(): 显示字符串消息,后跟当前错误的文本描述

  • strerror(): 返回当前错误值的文本描述指针

示例:

c

#include <stdio.h>
#include <errno.h>
#include <string.h>extern int errno;int main() {FILE *pf;int errnum;pf = fopen("unexist.txt", "rb");if (pf == NULL) {errnum = errno;fprintf(stderr, "Value of errno: %d\n", errno);perror("Error printed by perror");fprintf(stderr, "Error opening file: %s\n", strerror(errnum));} else {fclose(pf);}return 0;
}

输出:

text

Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory

常见错误处理场景

除以零错误处理

c

#include <stdio.h>
#include <stdlib.h>int main() {int dividend = 20;int divisor = 0;int quotient;if(divisor == 0) {fprintf(stderr, "Division by zero! Exiting...\n");exit(-1);}quotient = dividend / divisor;fprintf(stderr, "Value of quotient : %d\n", quotient);return 0;
}

程序退出状态

使用标准退出状态码可以提高代码的可读性和可维护性:

c

#include <stdio.h>
#include <stdlib.h>int main() {int dividend = 20;int divisor = 5;int quotient;if(divisor == 0) {fprintf(stderr, "Division by zero! Exiting...\n");exit(EXIT_FAILURE);  // 定义为-1}quotient = dividend / divisor;fprintf(stderr, "Value of quotient : %d\n", quotient);exit(EXIT_SUCCESS);  // 定义为0
}

最佳实践

  1. 在程序初始化时将errno设置为0

  2. 使用stderr文件流输出所有错误信息

  3. 使用EXIT_SUCCESSEXIT_FAILURE提高代码可读性

  4. 在可能出错的操作后检查返回值

  5. 使用强制转换运算符被认为是良好的编程习惯

通过合理运用类型转换和错误处理机制,可以编写出更加健壮、可维护的C语言程序。

http://www.dtcms.com/a/438684.html

相关文章:

  • 线上宣传方式昆明网络推广优化
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段应用练习(3):语法 +考え方16+2022年7月N1
  • 51单片机AD/DA
  • 九.寄生参数对变换器参数设计的影响
  • MapSet练习OJ题讲解(2易2中1难)
  • 1.2.1 RAG:构建你的专属知识库
  • 做网站找个人还是公司电商网站建设的意义
  • 网站开发人员定罪成都系统网站建设
  • 小迪web自用笔记49
  • win7 不能安装 scales 1.4.0,ggplot2,无法找到动态链接库的注入点
  • 厦门模板网站极简风格 网站
  • 第四届人工智能与智能信息处理国际学术会议(AIIIP 2025)
  • 网站建设与维护的试卷易点网络科技有限公司
  • wordpress标签调用代码优化师证书
  • 基于ECA-ResNet50的OAM光束相位重建:深度学习在光学涡旋场分析中的突破性应用
  • 搭建nginx的高性能web集群
  • 四川省城乡和建设厅网站微信公众上传wordpress
  • 从单词到语素的形态学
  • c++之基础A(自定义函数)(第二课)
  • 单图像去雨研究综述
  • REST架构的6大约束与API
  • 深圳婚纱摄影网站建设网络维护工程师工资多少
  • 北京企业网站搭建wordpress 国际化
  • uniappx几个生命周期说明
  • 网站推广策划思路的内容企业网组建
  • R语言绘制股票K线图及布林线
  • 【C++】26. 智能指针
  • 职业中学网站建设织梦 公司网站模板
  • 微信 网页版优化系统
  • 如何在 Linux 中更改用户的默认主目录 ?