zoukankan      html  css  js  c++  java
  • c语言的坑——for死循环

    且看下面两个死循环,我曾经就踩过这个坑,是第二个坑,因此特意记录一下。char在keil和iar中都是无符号的,因此要特别注意。

    unsigned char i;
    ​ for(i=0;i<256;i++)
    ​ {
    ​ ​ //something
    ​ }
            当我们用上述代码想实现一个小循环时,结果却事与愿违,这其实是死循环的另一种写法,因为无符号变量i最大只有255,要命的是,编译器并不会指出这个错误。

    与之相类似的代码是:

    ​ unsigned char i;
    ​ for(i=10;i>=0;i--)
    ​ {
    ​ ​ //something
    ​ }
    ​  这也是一个死循环,你看出什么原因了吗?无论i如何减,i都是大于等于0的。

            这就告诉我们对于每个变量类型的取值范围要由清醒的认识。值得注意的是相同的变量类型对于不同的CPU构架和不同的编译器会有不同的结果。比如int类型在大多数16位CPU构架中占用两个字节,但在32位CPU中却往往占用4个字节;char类型在绝大多数编译器中都是有符号数,但在keil MDK中却是无符号数,若是要在keil MDK下定义有符号char类型变量,必须用signed显式声明。我曾读过一本书,其中有一句话:“signed关键字也是很宽宏大量,你也可以完全当它不存在,在缺省状态下,编译器默认数据位signed类型”,这句话便是有异议的,我们应该对自己所用的CPU构架以及编译器熟练掌握。

    原文链接:https://blog.csdn.net/zhzht19861011/article/details/7251644

  • 相关阅读:
    文件
    drf序列化组件
    drf入门规范
    单例模式
    初识drf
    restful规范
    虚拟环境使用
    vue基础(三)
    vue基础(二)
    作业
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12146085.html
Copyright © 2011-2022 走看看