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\n",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__

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号