C/C++的注意事项

【实用篇】22条 C/C++ 注意事项 【实用篇】22条 C/C++ 常用注意事项,刷题考试时,再也不爆零! 阅读详情

         最近调试C语言程序,出了一些错误,费了很大的力气才找到这些BUG。现在把这些错误记录下来,同时做一些编程上的原则上的约束,希望能达到两个目的:(1)看到类似的情况,能马上定位知道是什么错误。(2)不在犯这种错误。

         将64位整型转换为32位整型,貌似是没什么问题。但是在做多结点间数据通信的时候,这个不注意的细节将导致很严重的错误。例如在发送端使用的是64位的整型,接收端使用32位整型,这样会导致接收端由于接收缓冲区中的数据没有完全被反序列化阻塞。

        还有使用无符号数的时候一定要注意,因为无符号数减去一个比自身还要大的数,容易出现很严重的问题。原理大家都知道,内部是使用补码存的,但是写程序的时候不一定能注意到。

        使用一些底层的库函数时一定要确保传入的数据类型与接口要求的数据类型一致。我就发生过因为使用zlib的compress函数时要求传入unsigned char * 和 unsigned long int *时,我使用了char *和 unsigned int *时出现一些莫名其妙的错误。

       在使用没有接触的技术或者是底层的库函数的时候,一定要写够测试程序,充分的熟悉接口的使用,而不应该直接集成在软件中,否则会出现很严重的问题。

        使用系统调用或者库函数或者第三方软件的函数时,如果有返回值,一定要检查返回值的情况,以判断程序是否正确。可能就是这样一个小小的问题就会导致导弹打偏或者卫星脱轨,或者是火车站售票系统上常显示的”XXXX位置的内存不能为读“之类的致命错误。如果函数可能会抛出异常,一定要捕获异常。在调试阶段,出现这样问题时,一定要使用exit或者abort之类的方法,强制程序在此结束,并打出当前的行号、文件名称,如果有必要的话还有堆栈信息等这些重要的调试信息。这些对于确定程序出错的位置非常有帮助。   

       养成读文档的好习惯,出现问题的很多一部分原因都是没有仔细阅读文档。文档中详细的说明了接口的使用和注意事项,没有注意到这些细节,调试简直就是自作自受。

       还有常做单元测试,确保缩写的部分代码能够正常运行。然后再集成到软件中,否则出现问题的付出的代价要大的多。

本文出自 “相信并热爱着” 博客,请务必保留此出处http://hipercomer.blog.51cto.com/4415661/861856

[C/C++循环嵌套 cpp] 如何避免死循环?- 详解循环语句中的注意事项 尤其是循环嵌套语句,例如 for 和 while,它们的使用范围广泛,但在编写时往往容易出现死循环的问题。如果不及时解决,会导致程序无法正常退出或奔溃,因此在编写循环嵌套语句时需要特别注意一些重要事项。总之,在编写循环嵌套语句时,需要谨慎地考虑每一项细节,并避免出现死循环等问题。在这个循环中,i 的值会一直增加直到 int 类型的最大值,然后从最小值开始重新增加,导致程序陷入死循环。当 j 的值超过 int 数据类型的最大值时,该值将变为负数,从而导致程序出现不可预测的错误。- 详解循环语句中的注意事项。 阅读详情

相关推荐

C/C++ 基本类型的重要注意事项

在本文中,我们讨论了数据类型的大小、有符号和无符号类型、类型转换以及字节顺序等重要注意事项,并提供了相应的源代码示例。通过遵循这些注意事项,您将能够更好地利用基本类型,并编写出更加健壮、可靠的 C/C++ 代码。在 C/C++ 中,类型转换是一种将一个类型的值转换为另一个类型的操作。在某些系统中,数据的低字节存储在内存的低地址处,而高字节存储在高地址处(小端序);在本文中,我们将探讨一些与 C/C++ 基本类型相关的重要注意事项,并提供相应的源代码示例。在 C/C++ 中,不同的基本类型具有不同的大小。

HackLogic的博客 138

世界排名前8的自动化测试工具,你用过几个?

软件开发实践随着时间的推移而变化,工具和技术也是如此。这些变革的意义在于提高生产效率、质量、客户满意度,解决交付时间越来越短的问题,并交付成功的产品和服务。而软件测试显然在实现这个过程中起着重要的作用。 在测试自动化领域,自动化工具占据了很重要的位置。测试工具的作用是为了提高测试效率,用软件来代替一些人工输入,把软件的一些简单问题直观的显示在测试人员的面前,这样更方便测试人员找出软件的bug。 本文将给大家分享一些好用的自动化测试工具,可供参考。 1.Selenium Selenium可能是最流行的网络应用

卓码测评 717

C/C++之#define预处理器指令注意事项

1. #define(预处理器指令从#开始运行,到后面的第一个换行符为止)预处理表达式的长度必须是一个逻辑行,一个逻辑行可以是多个物理行。每行#define(逻辑行)都由三部分组成,具体如下图: 2. #define中,双引号使替换的字符串成为字符串常量。编译器把该字符串存储在以空字符结尾的数组中。 #define SINGLE_CHA 'a' //定义了字符常量 #define CHA...

Postgres 数据库内核开发工程师 1484

自动化测试⽤例注意事项

自动化测试⽤例注意事项如下: 1、在⼀个测试类⾥⾯,每⼀个测试⽅法都是以test开头的,test不能是中间或者尾部,必须是开头,建 议test_ 2、每⼀个测试⽤例⽅法都应该有注释信息,这样在测试报告就会显示具体的测试点的检查点 3、在⾃动化测试中,每个测试⽤例都必须得有断⾔,⽆断⾔的⾃动化测试⽤例是⽆效的 4、最好⼀个测试⽤例⽅法对应⼀个业务测试点,不要多个业务检查点写⼀个测试⽤例 5、如果涉及到业务逻辑的处理,最好把业务逻辑的处理⽅法放在断⾔前⾯,这样做的⽬的是不要因为业 务

wqchibingshaonian的博客 218

c++易混淆的知识点及注意事项

c++易混淆的知识点及C++考试易混淆知识点及注意事项 下列程序有何问题,请仔细体会使用指针时应避免出现这个的问题。 #include int main() { int *p; *pInt = 9; cout << "The value at p: " << *p; return 0; } 解: 指针 p 没有初始化,也就是没有指向某个确定的内存单元,它指向内存中的一个随机地址, 给这个随机地址赋值是非常危险的。 注意事项

RTKLIB中RTK定位原理(一)

1 模型 1.1 非差观测值 非差观测值与RTKLIB中PPP定位原理——观测模型部分中一致。 1.2 单间单差观测值 若两个接收机距离较近,经过站间单差,电离层对流层延迟可消除,卫星s的钟差以及初始相位被消除,中依然包含接收机初始相位。 1.3 站间星间双差观测值 经过站间星间双差,接收机钟差及初始相位被消除。 2 EKF参数估计 2.1 EKF法则 EKF法则与RTKLIB中PPP定位原理——观测模型部分中一致。 2.2 状态变量与时间更新 (1)状态变量 在RTK...

papunzal的博客 3816

写 c++ 需要注意什么

编写 C++ 代码时,需要综合考虑内存管理、代码效率、安全性、异常处理等方面。C++ 是一门非常强大的语言,但也需要开发者在编写代码时保持细心和耐心。遵循现代 C++ 编程范式、利用 STL 和智能指针、保持代码简洁和清晰,能帮助你写出更加健壮和高效的代码。

weixin_42101997的博客 1075

FPGA—DHT11数字温湿度传感器

1. DH1T11温湿度传感器与DS18B20温湿度传感器非常类似,都是严格按照时序要求写代码。建议可以比较学习。2. 显示温度与湿度部分的数据处理,采用 X10 进行在数码管上的移一位显示,配合了数码管小数部分的显示特点又区分了温度与湿度。3. 程序是按照一个接一个状态及顺序跳转的,建议使用状态机。说明:本人使用的是野火家Xilinx Spartan6系列开发板及配套教程,以上内容如有疑惑或错误欢迎评论区指出,或者移步B站观看野火家视频教程。

m0_72885897的博客 4779

C++类的注意事项

清晰性:通过规范命名、访问权限和函数设计提高代码可读性。安全性:通过explicitprivate等限制避免误用。性能与可维护性:通过短小函数、组合优先等优化设计。如果有具体问题或需要进一步示例,请告诉我!

cxyhjl的博客 1061

AI应用安全 - Prompt注入攻击

随着大模型的爆火,各行各业都在使用大模型进行智能化改造。但是如何做一个可靠的大模型应用,就需要考虑各种安全问题。本文主要介绍一种常见的安全问题,即prompt注入攻击,并介绍一些防范手段。Prompt Injection Attack(提示注入攻击)是针对大型语言模型(LLM)的一种新兴安全威胁,攻击者通过精心构造的输入提示(prompt)来操纵模型行为,使其产生非预期输出或执行恶意操作。它主要包括两种注入方式,一是直接注入,而是间接注入。

sinat_28694519的博客 1932

在昇腾910B上,用kubeadm快速拉起一个双节点K8s集群(保姆级避坑指南)

本文详细介绍了在昇腾910B服务器上使用kubeadm快速搭建双节点Kubernetes集群的完整流程,包括环境准备、容器运行时配置、kubeadm初始化、节点加入与网络插件部署等关键步骤,特别针对ARM架构和昇腾芯片提供了优化配置和避坑指南。

weixin_29204749的博客 246

C/C++编程注意事项

1. 防止头文件的重复包含 #ifndef __TEST_H__ #define __TEST_H__ class Test { public: Test(); }; #endif // __TEST_H__ 否则会显示, 常见的error: redefinition of ‘class Test’ error: previous definition...

OpticalSoliton的专栏 958

Hyper-V集群部署指南

工欲善其事,必先利其器。搭建一个方便管理的服务集群,是分布式学习很重要的环境。 目前流行的虚拟机产品主要为Vmware 和 win10自带的Hyper-V(win10家庭版无此功能),网上关于Vmware的教程更多,显然它更容易上手,但Hyper-V也算是一个很不错的产品,这里记录一下我的学习过程: 目录 Hyper-V的安装 服务集群的搭建 虚拟机的网络通信 NAT网络的搭建 端口映射 Linux的静态IP 虚拟机的自启动问题 Hyper-V的安装 也不能算说是安装,如果你的win1

Swing 6919

64位平台C/C++开发注意事项

64位平台C/C++开发注意事项

qq_35836473的博客 446

2025 华为OD机试真题e卷 C语言 实现【竖直四子棋】

竖直四子棋的棋盘是竖立起来的,双方轮流选择棋盘的一列下子,棋子因重力落到棋盘底部或者其他棋子之上,当一列的棋子放满时,无法再在这列上下子。

MISAYAONE的博客 1417

通过miniconda conda安装jupyer的时候报错: InvalidArchiveError(“Error with archive

摘要:本文针对Windows系统使用Conda时出现的InvalidArchiveError错误(文件路径过长或压缩包损坏),提供了解决方案。建议以管理员身份运行PowerShell并执行命令启用长路径支持(LongPathsEnabled),然后重启电脑或终端。作者通过该方法成功解决了jupyter安装问题。附有错误截图和解决后的成功截图。

猿小白的博客 786

C/C++ #include 指令注意事项

指令是一个预处理器指令,用于在编译时将指定的文件内容包含到源文件中。这样可以确保头文件只被包含一次,避免重复定义和编译错误。指令在项目中的正确使用,从而提高代码的质量和可维护性。通过遵循这些注意事项,可以确保。在 C/C++ 中,

fenggang2021的博客 689

YOLO11有效改进专栏目录

YOLO11改进专栏导航

A1983Z的博客 3677

C/C++ 字面常量的注意事项

在 C/C++ 中使用字面常量时,有几个重要的注意事项需要考虑,以确保代码的准确性和可移植性。下面是一些关键要点:整数字面量:默认情况下,整数字面量是int类型。如果字面量的值超出了int的范围,它将被视为long int或long long int,这取决于它的值和编译器。可以在整数字面量后添加L或l后缀来明确指定它为l...

weixin_28717611的博客 186

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C/C++ new和delete使用注意事项

文章目录 new和delete,是C++进行动态内训分配时,常用的工具之一,他们必须成对使用。C++很多难以察觉和解决的错误都和内存分配相关。本文主要介绍new和delete的使用注意事项,同时了解相关的内存分配方式(比如malloc和free等)。 ...

qq_40250056的博客 2195

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

详解 C/C++ 全局对象注意事项

这意味着如果一个全局对象的析构依赖于另一个全局对象的状态,那么需要特别注意析构函数的执行顺序,以避免出现依赖的对象已经被析构而导致的问题。因此,必须确保全局对象的构造函数不依赖于任何在构造函数执行时尚未初始化的其他全局对象或静态变量。:虽然全局对象可以在整个程序中方便地访问和共享数据,但过度使用全局对象可能导致代码的可读性和可维护性下降。因此,应谨慎使用全局对象,并尽量将其使用范围限制在必要的范围内。:全局对象具有静态存储期,这意味着它们在程序的整个运行过程中都存在,而不是在创建它们的函数返回时就被销毁。

fenggang2021的博客 481

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C/C++宏定义注意事项

C/C++宏定义注意事项

wuleixxh的专栏 962

C/C++中的一些注意事项

文章目录1.结构体赋值相当于内存复制2.枚举的使用技巧3.C和C++中的头文件4.同名局部变量和全局变量的区别5.形参带默认参数的函数注意事项6.inline函数注意事项7.extern的省略问题8.C++和C源码互相调用的问题9.函数参数压栈时机10、访问权限的确认时机 1.结构体赋值相当于内存复制 struct stu{ int age; string name; }; struct stu s1,s2; s1.age = 10; s1.name = "Jack"; //赋值相当于内存复制 s2

weixin_39861267的博客 813
上一篇: dd命令
下一篇: 简单的map性能评测
下木
博客等级 码龄16年 88粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值