• c基础语法常用关键字


    变量

    在计算机中,整数是以补码形式存放的。所以如果整数的最高位是1,有符号数的话就是负数;如果是无符号数,则都表示正数

    整形 int ->32 -2^31~2^31
    无符号整形 unsigned int ->32 2^31
    volatile unsigned int

    volatile 不稳定的,易变的,告诉编译器要谨慎处理
    什么时候用 volatile,3种情况
    1.中断服务函数的共享变量
    2.多线程的共享变量
    3.寄存器变量 (举例,传感器拿到数据更改寄存器的某一位)

    相同点: 这三种情况 都属于 不属于main函数控制的范围

    在程序设计中 使用 int short char
    typedef unsigned int u32
    typedef unsigned short u16
    typedef unsigned char u8

    一个c代码文件编译过程:
    预处理,词法分析,语法分析,语义分析,编译为汇编,链接库文件
    a.c/a.h->a.i->a.s->a.o

    一个c在执行时包括什么?
    代码段 .text
    数据段 .data 被初始化的全局变量 volatile unsigned int b=1;
    BSS(未初始化数据段) 没有被初始化的全局变量 unsigned int a;

    关键字
    static------extern
    作用1 限定作用域
           作用域: 在一个.c中, 在一个函数中, 定义了static变量,不做初始化时,默认会自动初始化为0(数据放在数据段.data 的静态区)
    作用2 在一个函数中定义static时,调用过程中其值不变
    作用3 在模块中定义static时, 被定义者只能被本模块使用(类似于私有变量/函数)

    #define 仅仅是字符串常量替换,数据类型跟平台相关
    const 只读, 能指定数据类型

    #define PI 3.141592653 (数据类型不明确,需要看平台)
    const float PI=3.141592653 (精确指定用float类型)

    typedef 类型 别名
    typedef struct Student{
    int age;
    char name;
    }Stu;
    struct Student stu1;
    Stu stu1;

    位运算:
    & 按位与
    | 按位或
    ! 按位取反
    ^ 按位异或 如果两个相应bit位相同,则结果为0,否则为1

    <<(左移)
    运算规则: 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零
    数学意义: 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次左移n位就相当于乘以2的n次方

    >>(带符号右移)
    运算规则: 按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
    数学意义: 右移一位相当于除2,右移n位相当于除以2的n次方。取商,余数不要

    掩码MASK
    掩码的作用 提取某一位
    掩码的生成 掩码= 1<<提取的位数

    寄存器编程的三个手段
    1.置1 flag|=MASK flag|=(1<<(想要操作的位数))
    2.清0 flag&=~MASK flag&=~(1<<(想要操作的位数))
    3.转置 flag^=MASK flag^=(1<<(想要操作的位数))

    数组
    int a[容量]
    数组名 (const) 是个固定地址 (不能自加 不能赋值) 

    int a[32];
    int* pa;
    pa=a;
    pa++;

    函数
    函数的调用就是把函数的定义地址放入pc指针寄存器

    结构体
    结构体指针访问成员用->,结构体访问成员用.
    寄存器封装(注意:每个寄存器位数对齐操作)

    typedef volatile unsigned int VU32;
    typedef struct _T_Xxx_Config{
      union{
        struct{
          VU32 enable_start :1;
          VU32 read_start :1;
          VU32 stdbm :1;
          ...
        }bits;
        VU32 INIT;
      }adccon;
    }T_Xxx_Config;
    typedef T_Xxx_Config * p_XxxRegs;
    p_XxxRegs p_XxxReg;

    p_XxxReg->adccon.bits.enable_start=1;
    p_XxxReg->adccon.bits.read_start=1;

    参考:

    结构体: https://www.elecfans.com/d/1433999.html
    epoll: https://blog.csdn.net/armlinuxww/article/details/92803381

  • 相关阅读:
    multilabel-multiclass classifier
    关于zabbix _get返回Could not attach to pid的问题
    python导出环境依赖到req,txt文件中
    inode满的解决方法
    搞定面试官:咱们从头到尾再说一次 Java 垃圾回收
    SpringBoot项目,如何优雅的把接口参数中的空白值替换为null值?
    万万没想到,JVM内存区域的面试题也可以问的这么难?
    万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题…..
    npm私服verdaccio报sha错误的解决方案
    配置SQL Server 2016无域AlwaysOn(转)
  • 原文地址:https://www.cnblogs.com/sanmubai/p/16224315.html
Copyright © 2020-2023  润新知