Linux操作系统gcc编译C代码的过程及C语言基本的数据类型及存储方式

1.gcc编译的流程步骤:
    1.预处理
        处理和“ # ”号相关代码
        1.头文件展开
        #include 
        2.宏定义替换
        #define  M    100  
        3.条件编译
        #if #elif #else #endif #ifndef #ifdef 

        用gcc-E预处理filename.c这个c程序。
        gcc -E filename.c -o filename.o

可以看到被展开的头文件


    2.编译
        将C语言代码编译成汇编代码

gcc -S来将c程序编译成汇编语言

可以看到被编译成汇编语言的c代码
    

    3.汇编
        将汇编代码编译成二进制代码。

        gcc -c来将汇编代码编译成二进制代码

可以看到乱码的二进制代码



  
    4.链接 
        将多个二进制代码链接成为一个可执行程序
用gcc来编译C语言代码

可以看到编译成的二进制乱码可执行的文件

2. C语言基本的数据类型及存储方式

1.数据类型分类
  1.基本数据类型:
            整形数据
              short (signed short)
              unsigned short 
              int   (signed int)
              unsigned int 
              long  (signed long)
              unsigned long 

            浮点型数据 float double 
            字符型 char
            逻辑类型(泊尔类型) bool 
            缺省类型(void)
        

    2.构造数据类型(不做介绍)
            结构体
            共用体
            枚举类型


    3.基本数据类型
        1.整数类型:

            名称                               占内存空间          值域范围                 存储方式
     short: 短整形                       2个字节空间         -32768 - 32767          补码
     unsigned short: 无符号短整型  2个字节空间    0 - 65535               对应的二进制数
     int:   整形                             4个字节空间         -21亿 - 21亿            补码
     unsigned int:   无符号整形   4个字节空间         0 - 42亿                对应的二进制数
     long:  长整型                       8个字节空间         -2^63 - 2^63 -1        补码
     unsigned long:  无符号长整型  8个字节空间    0 - 2^64                对应的二进制数
2.浮点数类型:
            float 
            double 

            3.1415926 
            5.12 
            所有的浮点数类型均为有符号类型,没有无符号类型的概念

            名称                                            占内存空间大小          值域范围                        存储方式 
            float   单精度浮点数类型(最多表示6-8位有效数字)     4个字节         -3.4*10^38 - 1.18*10^-38             1位符号位 + 8位指数位 + 23位尾数位
                                                                            1.18*16^-38 - 3.4*10^38
            double  双精度浮点数类型(最多表示12-14位有效数字)   8个字节         -1.80*10^308 - 2.23*10^-308          1位符号位 + 11位指数位 + 52位尾数位
                                                                            2.23*10^-308 - 1.80*10^308

            浮点数 -> 二进制形式 -> 科学计数法转换 -> 小数点后存入尾数位中 -> 指数位+偏移数(float:127 double:1023)以二进制形式存入指数位中 

            IEEE754 
            和整数存储方式完全不同

        3.字符型:
            char 
            a .. z
            A .. Z 
            # ? .. 

            ASCII码表:
            字符和数字的对应关系

            a -> 97 

            名称                内存空间大小                值域范围            存储方式 
            unsigned char       1个字节                    0 - 255             存储字符在ASCII码表中对应数字的二进制形式 


            signed char         1个字节                    -128 - 127       

        4.逻辑类型:
            bool 

            名称                内存空间大小            值域范围                存储方式 
            泊尔类型 bool       1个字节                 true                    1
                                                                       false                   0

            在C语言中所有的非0值均为逻辑真值
                            0值为逻辑假值

        5.缺省类型:
            void 

            搭配函数和指针使用

            void a;

2.常量和变量:
        1.常量: 在程序运行过程中值不允许发生改变的量
        2.变量: 在程序运行过程中值可以发生改变的量
        3.表达式:由一个或者多个运算符连接的变量和常量组成的式子

    1.整形常量:
        默认为int类型

        100         int类型
        100l        long类型
        100u        unsigned int类型 
        100ul       unsigned long类型
        100L 
        100U 
        100UL 

        0123        八进制常量
        0x1a        十六进制常量
        0X1A

    2.整形变量:
        1.变量要先定义再使用
            1.变量定义的形式:
                数据类型 变量名;

                1.变量名可以由字母、数字、下划线构成不能以数字开头
                2.变量名不能与C语言关键字重名
                3.变量名最好不要与库函数重名
                4.变量名最好是见名知意 
                    
                    驼峰法:
                    int TempNum;
                    int MaxCnt;
                    int MinNum;
                    int AvgScore;

                    内核法:
                    int temp_num;
                    int max_cnt;
                    int min_cnt;
                    int avg_score;

        2.变量拥有存储空间,也有值域范围

    3. 浮点型常量:
        默认为double类型 

        3.1415          double类型
        3.1415f         float类型 
        3.1415e8
        3.1415e-8
        3.1415E8
        3.1414E-8

4. 浮点型变量:
        double d;
        float f;
    5.字符型常量:
        'a' 'A'
        'z' 'Z'
        '?' '#'
        '~' ' '
        '\'' : '号
        '\n' : 换行符
        '\t' : 横向制表符
        '\v' : 纵向制表符
        '\r' : 回车符
        '\b' : 退格符
        '\\' : \符 
        '0'
        '1'  : 字符1 
        '2'  
        '3'
        '4'
        '5'
        '6'
        '7'
        '8'
        '9' 
        '\0' : 字符\0
        '1' -> ASCII码表 -> 49      
        1   : 1
        '0'  : 48 
        0    : 0
        '\0' : ASCII码值为0 用来标识字符串的结尾
        '\123' : 八进制123对应的字符
        '\x32' : 十六进制32对应的字符  
    6.字符型变量:
        char ch;
   

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值