嵌入式学习记录17

一,预处理

#include 

#define  N 10

预处理命令:     都是以 # 开头的 

1.gcc的编译过程:

.c文件   //   vim 编辑的文件

A:预处理: 

    把程序中 # 开头的预处理命令 执行了 。    

    形成 --预处理文件 --源代码文件 

eg:

        gcc -E main.c -o main.i 

.i 文件

B:编译:         //         编译成汇编文件 

       gcc -S main.i -o main.s 

C:汇编    //   将汇编文件 编译 成 目标文件(机器代码)

       gcc -c mian.s -o main.o 

D:链接:    需要与用到相关库函数进行链接 ,生产最终可执行文件

2.宏定义

  #define N 10 

 注意:

     a. 宏名 --标识符 

        符合标识符的定义规则。        一般写成大写

     b. 宏对应的值 是一个常量 

     c. 只是做简单的文本的替换不做计算 

     d. 宏的嵌套 

     e.最后不能写分号,因为分号也会作为宏值一部分,参与到文本的替换中

     f.  #undef 终止宏的定义 

          后面的代码不能再用这个宏 

3.带参的宏 

3.1 形式:

         #define 宏名(参数) 宏值 

宏展开的副作用 :      当遇到 两个相加时 (a+b ,c+d),宏赋值到代码时也没有括号,造成运算错误;   所以 能加括号的都加上

3.2带参宏:

       文本替换 --- 有可能导致,  源代码的体积变大 

       快 --预处理阶段干 

       编译之后,对应的代码就已经在可执行代码中了

3.3 函数:

       调用 ---- 只有一份代码

       会有时空开销。

 可以选择带参宏,功能小,代码量少

4.文件包含 

 #include <> 

 #include ""

eg:

 #include  

<  > //   表示包含的文件,在编译器默认的搜索路径下    /usr/include 

"  "   先在当前目录下寻找,若没有再到默认目录下寻找。

系统相关的标准头文件,用  <  >

自己定义的 用    "  "

5. #if 0

   #endif 

 头文件重复包含的处理 

选择打开:

#  if  0

#else

#endif

配合宏,选择合适打开;

多个头文件声明多次重复使用一个宏文件,导致最后合成文件多次被调用,定义,在头文件中;可以用#if 0 选择是否存在那个文件,存在就跳过;最终头文件只定义一次;

  

你可能感兴趣的:(学习)