📜  预处理程序如何在C中工作?

📅  最后修改于: 2021-05-25 20:25:08             🧑  作者: Mango

编译C程序–幕后花絮

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

  • 预处理程序不了解C的作用域规则。#define之类的预处理程序指令一经看到便立即生效,并一直有效直到包含它们的文件的末尾。程序的块结构无关紧要。

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

    1. 删除评论:删除所有评论。注释仅供人类理解代码。因此,很明显,它们对机器没有用。因此,预处理器会删除所有它们,因为它们在执行中不是必需的,也不会被执行。

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


      您将看到输出,其中的代码没有注释。

      该文件以’.i’扩展名(prog.i)保存,该扩展名将输入到编译器中。

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

      是宏的简单示例。

      • 宏有两种类型:类对象(不带参数)和类函数(可以带参数)
        // object-like macro
        #define        
        // function-like macro          
        #define ()   
      • 您可以使用#undef删除宏定义:
        // delete the macro
        # undef      
         We can write multi-line macro same like function, but each statement ends with “\”. 
        
                        
                            #include     #define MACRO(num, str) {\             printf("%d", num);\             printf(" is");\             printf(" %s number", str);\             printf("\n");\            }
                                
                            
                        
    想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。