zoukankan      html  css  js  c++  java
  • 预处理&&Makefile基本操作(篇十一)

    1. gcc 编译
      编译过程
      a. 预处理
      gcc -E file.c -o file.i

       	将头文件载入的该源文件中
       	删除代码中的所有注释
       	将所有的宏,进行原地替换
       	处理所有的条件语句
       	
       b. 编译
       	gcc -S file.i -o file.S
       	生成相应的汇编代码
       	
       c. 汇编
       	gcc -c file.S -o file.o
       	将汇编代码翻译成机器可识别的语言
       
       d. 链接
       	gcc file.o -o file
       	链接动态库,生成可执行文件
       
       综合:
       	gcc file.c -o file
       	gcc -o file file.c
      
    2. 多文件及其管理
      头文件的包含:
      <>: 系统头文件或标准库头文件
      “”: 是用户自定义头文件

      提高查找效率

      自定义多个头文件
      head01.h —> head02.h
      head02.h

      头文件:
      标准库头文件
      结构的定义申明
      宏定义

    3. 预处理
      如何防止头文件重复包含:

      宏定义:
      #define 标识符 内容
      #define LEN 5

       取消宏定义
       #undef 标识符
       
       #ifndef 标识符  ---> 如果标识符不存在,则执行以下代码
       #endif
       
       #ifdef 标识符  ----> 如果标识符存在,则执行以下代码
       #endif
       
       防止头文件的重复包含:
       #ifndef __MY_HEAD__
       #define __MY_HEAD__
       
       //函数声明,结构声明......
       
       #endif
       
       其中:
       	__MY_HEAD__: 一般为自定义头文件名称
      
    4. makefile
      (1)多文件管理
      便于实际开发,提高开发效率

    (2)makefile 文件的名称
    Makefile
    makefile

    (3)makefile 的语法规则
    # 开头的语句为注释内容

    (4)常用标识符
    $<:满足当前依赖关系的所有文件
    $^:满足当前依赖关系的第一个文件
    $@: 目标文件

    (5)Makefile 中的变量
    variable := value1
    variable ?= value2 //立即变量
    variable = value3 //延时变量

    立即变量:在定义的时候,明确赋值的变量
    延时变量:在使用的时候,确定其值
    
    //向变量中添加新值
    variable += value;
    
    //引用变量的值
    $(vaiable)
    
    基本语法规则:
    

    目标文件:依赖文件
    <Tab键>规则

    知识点补充:
    (1)数组作为函数参数问题
    数组作为函数参数时,自动降级为同类型的指针
    即实参传数组首元素的地址或某个元素的地址
    形参是与数组同类型的一个指针

    (2)指针数组
    每一个元素都是一个指针

    (3)指针与字符串
    char arr[8] = “China!”;
    char *str = “China!!”;

    //以下代码分别输出???  ---> 课后思考
    arr[0] = 'a';
    printf("arr = %s
    ", arr);  //
    
    str[0] = 'a';
    printf("str = %s
    ", str); //
    

    (4)二位数组的访问和简单使用
    int arr[2][3] = {0}; //初始化同一维数组

    int arr[3][3] = {1,2,3,4,5,6,7,8,9}; //OK
    
    int buf[3][3] = {
    					{1,2,3},
    					{4,5,6},
    					{7,8,9}
    				};  //OK
    
    访问二维数组:
    	arr[1][2]  // 3
    
    int arr[3][] = {1,2,3,4,5};	//Error
    int arr[][3] = {1,2,3,4,5};	//OK
    int arr[][]  = {1,2,3,4,5};	//Error
    
    千里之行,始于足下!
  • 相关阅读:
    软件工程实践总结作业
    SDN第4次上机作业
    SDN第四次作业
    SDN第三次上机作业
    SDN第三次作业
    SDN第二次上机作业
    SDN第一次上机作业
    免费自动生成字幕工具推荐,啃生肉啊(6.12更新)
    博客园美化,自定义你的博客,css+html (iframe)
    找质数、素数_算法优化(C++)
  • 原文地址:https://www.cnblogs.com/MINAIot/p/13041010.html
Copyright © 2011-2022 走看看