龙空技术网

C/C++编程笔记:C++中的未定义行为,及其优缺分析

C语言编程 108

前言:

今天我们对“c语言源代码未编译是什么意思啊”大约比较注意,大家都想要分析一些“c语言源代码未编译是什么意思啊”的相关内容。那么小编同时在网摘上汇集了一些关于“c语言源代码未编译是什么意思啊””的相关内容,希望你们能喜欢,兄弟们一起来学习一下吧!

考虑一下C / C ++程序并尝试猜测输出什么?

举例一:

举例二:

举例三:

举例四:

举例五:

举例六:

举例七:

以上所有程序的输出都是不可预测的(或不确定的)。编译器(实现C / C ++标准)可以自由地做任何事情,因为C和C ++标准未定义它们。

像Java这样的语言会立即发现错误,但是在少数情况下,像C和C ++这样的语言会继续以静默但有错误的方式执行代码,这可能会导致无法预测的结果。该程序可能会因任何类型的错误消息而崩溃,也可能在不知不觉中损坏数据的情况,这是一个严重的问题。

了解未定义行为的重要性

如果用户开始在C / C ++环境中学习并且对未定义行为的概念不清楚,那么将来可能会带来很多问题,例如在调试其他人的代码时可能实际上很难跟踪根目录。未定义的错误。

未定义行为

的风险和缺点程序员有时依赖未定义行为的特定实现(或编译器),这可能会在更改/升级编译器时引起问题。例如,最后一个程序在大多数编译器中产生72作为输出,但是基于此假设实现软件不是一个好主意。

未定义的行为也可能导致安全漏洞,特别是由于未检查数组越界的情况(导致缓冲区溢出攻击)。

未定义行为的优点

C和C ++具有未定义行为,因为它允许编译器避免进行大量检查。假设一组具有较高性能数组的代码无需关注边界,这避免了需要复杂的优化过程来检查循环外的此类条件。当紧密绑定循环获得C编译器通常提供的带符号溢出的未定义性质的优点时,会将程序从30%加快到50%的速度。

我们还有另一个优点,因为它允许我们将变量的值存储在处理器寄存器中,并在大于源代码中变量的时间内进行操作。它还有助于进行环绕检查,然后进行编译时检查,如果不更了解C / C ++编译器中的未定义行为,就无法进行检查。

希望对你有帮助~

另外如果你想更好地提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

编程学习书籍分享:

编程学习视频分享:

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

C语言C++编程学习交流圈子,点击下方【了解更多】获取更多学习资料帮助你学习成长哦~

标签: #c语言源代码未编译是什么意思啊 #c语言源代码未编译是什么意思呀