预处理器在C语言中是如何工作的?

编译C程序——幕后

null

预处理器是一种系统软件(设计用于在计算机硬件和应用程序上运行的计算机程序)。它执行高级语言(HLL)的预处理。预处理是语言处理系统的第一步。语言处理系统将高级语言翻译成机器级语言或绝对机器代码(即机器可以理解的形式)。

  • 预处理器不知道C的作用域规则。像#define这样的预处理器指令在看到它们后立即生效,并一直有效,直到包含它们的文件结束;程序的块结构无关紧要。

    图片[1]-预处理器在C语言中是如何工作的?-yiteyi-C++库

    预处理器主要对HLL代码执行三项任务:

    1. 删除评论: 它会删除所有评论。注释仅为人类理解代码而编写。因此,很明显,它们对机器毫无用处。因此,预处理器会删除所有这些文件,因为它们在执行过程中不需要,也不会被执行。

      以下是如何在linux中查看带有删除注释的文件): 编写一个C代码(文件名为 掠夺。c ).使用命令对其进行预处理 gcc-E程序。C

      图片[2]-预处理器在C语言中是如何工作的?-yiteyi-C++库 您将看到代码没有注释的输出。 图片[3]-预处理器在C语言中是如何工作的?-yiteyi-C++库 此文件以“”保存。i’扩展名(prog.i),它将被输入到编译器。

    2. 文件包含: 包括我们程序所需的库中的所有文件。我们在HLL中写作 #包括 这是预处理器的指令,告诉它包含指定的库文件的内容。例如#包括 将告诉预处理器在库文件stdio中包含所有内容。H 这也可以用双引号写#包括“stdio.h” 注: 如果文件名被括在尖括号内,则会在标准编译器包含路径中搜索该文件。如果文件名包含在双引号内,则搜索路径将展开以包括当前源目录。
    3. 扩展: 宏可以被称为小函数,其处理开销较小。如果我们必须编写一个需要递归(一次又一次)调用的函数(定义很小),那么我们应该更喜欢宏而不是函数。 所以,定义这些宏是由预处理器完成的。
      #define SI 1000

      是宏的一个简单示例。

      • 宏有两种类型:类对象(不接受参数)和类函数(可以接受参数)
        // object-like macro
        #define        
        // function-like macro          
        #define ()   
      • 可以使用#unde删除宏定义:
        // delete the macro
        # undef      
        
      • We can write multi-line macro same like function, but each statement ends with “”.
        #include <stdio.h>
           
        #define MACRO(num, str) {
                    printf("%d", num);
                    printf(" is");
                    printf(" %s number", str);
                    printf("");
                   }
        
        

    本文由 迪克莎 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

    如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享