zoukankan      html  css  js  c++  java
  • C和指针 第五章 警告总结

     1.有符号的值得右移位操作是不可移植的

     2.移位操作的位数是个负数,是未定义的

     3.连续赋值的各个变量的长度 不一,导致变量值截断。

    #include <stdio.h>
    
    int main()
    {
    	char chr_num;
    	int  int_num;
         //截断
    	int_num = chr_num = 100000;
    
    	return 0;
    }
    

      编译器提示:

      

       4.条件语句勿用=代替==

       5.勿用 | 代替||, & 代替 &&

       6.不同的用于表示布尔值非零值之间进行比较。

      

    #define FALSE  0
    #define TRUE   1
    
    //如果flag为任意整型值,那么下面两个语句是不等价的
    if(flag == TRUE)
    {
    }
    
    if(flag)
    {
    }
    

      避免混合使用整型值和布尔值

      7.表达式赋值的位置并不决定表达式的计算精度。

      如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另外一个操作数的类型,否则操作数无法进行。

      

    寻常算术转换
    long double
    double 
    float 
    unsigned long int
    long int
    unsigned int
    int
    

      如果某个操作数排名较低,那么它首先转换为另外一个操作数的类型,然后执行操作。

    例如 在16位的机器上

    int a = 5000;
    int b = 100;
    long c = a * b;
    

    会发生溢出,需要将a * b的结果转换为长整型。

    int a = 5000;
    int b = 100;
    long c = (long) a * b;
    

      8.编写结果依赖于求值顺序的表达式

      表达式的求值顺序由三个因素影响:

      操作符的优先级

      操作符的结合性

      操作符是否控制执行顺序

      操作符的优先级决定了相邻的操作符哪个先被执行,如果优先级相等,那么结合性决定执行顺序,

      但是,这些并不能完全决定表达式的求值顺序,编译器只要不违背优先级和结合性规则,可以自由决定复杂表达式的求值顺序。所以如果,表达式的结果依赖于求值顺序,那么,本质上是不可移植的,避免使用。

  • 相关阅读:
    docker配置国内加速器
    pwm原理与stm32控制
    【C语言】赋值表达式自增自减逗号表达式
    linux下利用paho.mqtt.c进行mqtt开发 #c编程
    linux下tcp #c编程
    windows下的linux子系统虚拟串口的使用
    linux下搭建mqtt服务器(mosquitto)
    linux下paho.mqtt.c下载安装
    树莓派&mysql数据库
    vscode+mysql数据库编程
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/5770075.html
Copyright © 2011-2022 走看看