Bootstrap

C语言学习笔记

C语言第一个程序
    #include <stdio.h>
    程序员所编写的代码都不是标准的C代码,需要一段程序翻译成标准C代码,负责翻译的程序叫做预处理器,
    翻译的过程叫做预处理,被翻译的语句叫做预处理指令,以#靠开头一段语句都是预处理指令
        #include的功能是把一个头文件导入(拷贝)到当前位置
            #include <xxx.h>
                从系统指定的路径下查找并加载头文件
            #include "xxx.h"
                先从当前工作路径查找,如果找不到再从系统指定路径查找并加载
        stdio.h
            头文件:以.h结尾,里面存储的是一些辅助性的代码,绝大多数都是函数的声明
            源文件:以.c结尾,里面存储的是实际的功能性的代码
            C语言标准委员会为C语言以函数形式提供的一些基础功能,这些函数都被封装在libc.so(标准C库)
            然后通过很多的头文件对不同功能的标准库函数进行了说明,stdio.h就是其中之一,常用:stdlib.h
            string.h
    int main()
        C语言中函数是管理代码的最小单位,一个函数就是一个功能的实现
        main函数是整个程序的入口,有且只有一个,main函数是由操作系统调用,所以它的返回值给了操作系统,
        反应了程序是如何结束的
        int是一种数据类型,表示main函数的执行结果是一个整数值
    {
        printf("Hello World!\n");
            printf/scanf 是标准库的输出/输入函数,一般用于调试代码
            转义字符:键盘上有一些不好直接表示的符号,通过一些特殊字符搭配来表示,这种字符搭配成为转义字符
                \n 换行
                \t 制表符,Tab键
                \a 铃响
                \b 退格,光标后退一个字符
                \r 光标回到行首
                %% 显示一个%
                \\ 显示一个\
        return 0;
            return的作用:
            1、返回一个执行结果给函数的调用者
                正数    出现异常(别人导致)
                0       一切正常
                负数    出现错误(自己导致)
            2、提前结束函数
                main函数遇到return语句程序结束
    }

编译器:
    负责把人能看得懂的文本文件,翻译成计算机能看懂的二进制文件,由预处理器、编译器、链接器组成
    gcc编译器是GNU社区为了编译Linux内核代码而开发一款免费的编译器,默认语法标准是C99或者C89
    常用的编译参数:
        -E      只显示预处理结果
        -S      生成汇编文件
        -c      只编译不链接
        -o      指定编译结果的名字
        -I      指定头文件的加载路径
        -l      指定要使用的代码库 -lm导入数学库
        -wall   尽可能多地产生警告信息
        -werror 把警告当错误处理
        -std    设置编译语法标准 -std=gnu89/99

C代码如何从源文件变成课执行文件的过程:
    1、预处理:把源文件翻译成预处理文件
        gcc -E xxx.c    显示预处理结果到终端
        gcc -E xxx.c -o xxx.i 把预处理的结果存储到xxx.i预处理文件中
    2、编译:把预处理文件翻译成汇编文件
        gcc -S xxx.i    生成以.s结尾的汇编文件
    3、汇编:把汇编文件翻译成二进制的目标文件
        gcc -c xxx.s    生成以.o结尾的目标文件
    4、链接:把若干个目标文件合并成一个可执行文件
        gcc a.o b.o c.o ... 生成a.out可执行文件

C语言中的文件类型:
    .c 源文件
    .h 头文件
    .h.gch 头文件的编译结果文件,会被优先使用
    .i 预处理文件
    .s 汇编文件
    .o 目标文件
    .so 共享库文件
    .a 静态库文件             

数据类型
    为什么对数据进行分类?
        1、现实中的数据就是自带类别属性的
        2、对数据进行分类可以节约内存存储空间、提高运行速度

;