zoukankan      html  css  js  c++  java
  • gcc编译C语言的步骤

    一、预处理

      gcc -E  xx.c------> 生成  .i  文件

      进行预处理工作  不会自动生成文件

      工作内容:

         ① 宏替换头文件导入条件编译

         ② 去掉注释内容  

    二、编译

      gcc -S  xx.i ------->生成汇编程序 .s

      检查语法错误  生成汇编程序

      工作内容:

        检查源代码或者经过预处理之后代码的语法错误

    三、汇编

      gcc -c xx.s ------->生成目标文件 .o

      工作内容:

        把汇编代码汇编成目标文件(二进制)   其实是用as命令

    四、链接

      gcc  xx.o  ------>生成可执行程序a.out

      链接一个或者多个目标文件生成可执行程序   默认是a.out   其实是用ld命令

      工作内容:链接函数调用

      gcc *.o     链接所有的目标文件 生成 可执行程序

      -o  可以指定目标文件名字

    注意:

    语法错误检查:在编译阶段
    函数调用检查:在链接阶段

    预处理指令
      在预处理阶段就会进行处理的指令
      以#开头的指令

      一、#include   包含头文件    

        导入头文件中的代码
          调用了标准库的函数时需要导入头文件
        #include <> 与 #include ""的区别
          <> 从系统指定的路径(可配置)搜索包含的头文件
          "" 从当前目录搜索包含的头文件,
          如果在当前目录下没有找到,则去系统指定的目录下搜索
          如果是包含自己写的头文件时用"",包含标准库的一般用<>

      二、#define

        宏名 一般用大写字母
        1.宏定义 在预处理阶段进行简单的宏替换
          #define PI 3.14
        2.宏函数
          #define POW(x) ((x)*(x))
        预处理阶段不进行运算 只进行替换

        注意:不要在宏定义后面加上 ;
           宏函数需要给每个参数都加上小括号 以及最后整体加上小括号 避免产生歧义
           宏函数和参数列表之间不能有额外的空格

        3.  可以连接宏定义
          一般而言 宏只能放在一行 但是可以通过 来连接多行 作为同一个宏定义
        4. # 可以把一个标识符变成一个字面值字符串
          #define TOSTR(x) #x
          #define print(x) printf(#x"=%d ",x)
        5. ## 可以生成新的标识符
        6.宏的作用:
          ① 方便修改
          ② 简化编程
          ③ 参数没有类型限制 灵活

        7.宏可以在代码中用 #define 定义,也可以在编译时用 -D 宏名称 来定义宏

      三、条件编译 

        分支选择语句   只有当执行时才确定执行哪一个分支 会把两个分支的语句都编译到代码中去

        编译时 可以选择 编译的代码  

          #if 根据宏的值来进行条件编译
          #elif
          #else #否则
          #endif #条件编译结尾
          #ifdef #if defined 如果定义了某个宏 用宏是否定义来进行条件编译
          #ifndef 如果没有定义某个宏
          #undef 删除一个宏 取消宏定义

     

          #ifdef/#ifndef/#if defined #endif //宏是否定义来进行条件编译
          #if /#elif #endif //宏的值来进行条件编译

        头文件卫士:    

        用于防止多次引用该头文件
        如果不加 程序稍微复杂一些就可能引发重复定义的错误
          #ifndef XXX_H__
          #define XXX_H__

          
          #endif //XXX_H__

  • 相关阅读:
    渡一 20 date对象,定时器
    渡一 22 事件
    渡一 21获取窗口属性,dom尺寸,脚本化css
    渡一 18&19 选择器,节点类型&Dom基本操作
    渡一 16-2 dom操作初探
    渡一 16-1 try..catch,es5标准模式
    iOS 相关职位要求整理版
    Mac使用技巧
    issues about Facebook Login
    10_Segue Example
  • 原文地址:https://www.cnblogs.com/jiangyu0331/p/11670974.html
Copyright © 2011-2022 走看看