• C语言的预处理命令


      C语言编译器处理时经过的第一个步骤是预处理,就是从.c文件处理为.i文件。在预处理时编译器做了一些展开替换的处理。

      1>头文件展开,即将#include "stdio.h"类似的文件展开。

      2>宏定义的替换工作,即将程序中的宏定义内容替换好。

    #include"stdio.h"
    #define R 10
    int main()
    {
    	int a = R;
    }
    

      经过预处理之后代码变为

    //...stdio.h里的内容未展示
    //宏定义的地方已经替换到程序中
    int main()
    {
    	int a = 10;
        return 0; }

      宏定义做的替换是整体替换,和语法无关,它不遵循语法规则。

      宏定义一般两种用法,一种是定义一种常量,另一种是定义一个宏函数

    #define N(n,m) n+m//宏定义
    int main()
    {
             int c;
             c = N(1,2);//对1和2相加 
          return 0; }

      其实经过预处理之后变为

    int main()
    {
    	int c;
    	c = 1 + 2;
         return 0; }

      另一种应用宏函数,因为宏定义不会考虑语法,它只是作整体代换,所以可以写出不考虑变量类型的函数,这一点是他的优点

      举例说明,如下代码:

    #define N(n,m) n+m//宏定义
    int main()
    {
    	int e = N(10,20) * N(10,20)//预处理之后是int e = 10 + 20 * 10 + 20;
    //上面容易算错误!!
    	return 0;
    }
    

      3>条件编译:有些语句希望在条件满足时才编译。

    #ifdef 标识符
      //程序段1
    #else
      //程序段2
    #endif
    

      当标识符已经定义时,程序段1才参加编译

      在其使用时和define一样也是做了一个替换工作。
     
    对C语言有了一定认识。。。看Linux C语言视频学的。
  • 相关阅读:
    HDU- 1075 What Are You Talking About (Trie or map)
    HDU-1251 统计难题 (Trie)
    Trie树模板(插入和查询)
    HDU 5120 Intersection
    HDU 5025 Saving Tang Monk(状压bfs)
    Light OJ 1094 (树的直径)
    zzuli 1877 蛤玮打扫教室
    HDU 5642 King's Order(数位dp)
    POJ 2689 Prime Distance
    hdu 3853 LOOPS(概率dp)
  • 原文地址:https://www.cnblogs.com/flyingjun/p/4767981.html
Copyright © 2020-2023  润新知