0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言预处理指令及分类

strongerHuang 来源:嵌入式专栏 作者:strongerHuang 2020-11-29 10:14 次阅读

C语言编程过程中,经常会用到如 #include、#define 等指令,这些标识开头的指令被称为预处理指令,预处理指令由预处理程序(预处理器)操作。

相比其他编程语言,C/C++ 语言更依赖预处理器,故在阅读或开发 C/C++ 程序过程中,可能会接触大量的预处理指令。

1

预处理指令及分类C/C++ 程序中的源代码中包含以 # 开头的各种编译指令,这些指令称为预处理指令。预处理指令不属于 C/C++ 语言的语法,但在一定意义上可以说预处理扩展了 C/C++。

ANSI C 定义的预处理指令主要包括:文件包含、宏定义、条件编译和特殊控制等 4 类。

1. 文件包含

文件包含:#include 是 C 程序设计中最常用的预处理指令。例如,几乎每个需要输入输出的 C 程序,都要包含 #include《stdio.h》 指令,表示把 stdio.h 文件中的全部内容,替换该行指令。

包含文件的格式有 #include 后面跟尖括号 《》 和双引号 “” 之分。两者的主要差别是搜索路径的不同。

尖括号形式:如 #include《math.h》,预处理器直接到系统目录对应文件中搜索 math.h 文件,搜索不到则报错。系统提供的头文件一般采用该包含方式,而自定义的头文件不能采用该方式。

双引号形式:如 #include“cal.h”,首先到当前工作目录下查找该文件,如果没有找到,再到系统目录下查找。包含自定义的头文件,一般采用该方式。虽然系统头文件采用此方式也正确,但浪费了不必要的搜索时间,故系统头文件不建议采用该包含方式。

2.宏定义

宏定义:包括定义宏 #define 和宏删除 #undef。

以 #define 开头,可以定义无参数宏和带参的宏定义。程序中经常使用无参宏定义来定义符号常量。例如:

#define PI 3.1416 //定义无符号宏,或定义符号常量 PI

#undef 表示删除已定义的宏,例如:

#undef PI //删除前面该宏的定义

3.条件编译

条件编译:主要是为了有选择性地执行相应操作,防止宏替换内容(如文件等)的重复包含。

常见的条件编译指令有 #if、#elif、#else、#endif、#ifdef、#ifndef。

4.特殊控制

特殊控制:ANSI C 还定义了特殊作用的预处理指令,如 #error、#pragma。

#error:使预处理器输出指定的错误信息,通常用于调试程序。

#pragma:是功能比较丰富且灵活的指令,可以有不同的参数选择,从而完成相应的特 定功能操作。调用格式为:#pragma 参数。

其中,参数可以有 message 类型、code_seg、once、warning、pack 等。通常使用如下的预处理指令来设定内存以 n 字节对齐方式。

#pragma pack (n) //其中 n 称为对齐系数,取 1、2、4、8.。.

2

预处理器及其工作原理

C预处理器(C Pre-Processor)也常简写为 CPP,是一个与 C 编译器独立的小程序,预编译器并不理解 C 语言语法,它仅是在程序源文件被编译之前,实现文本替换的功能。

目前预编译器巳集成到集成开发环境中,一般并没有执行预处理操作的选项,而包含在了编译操作中,即选择编译操作时,首先调用的是预处理器,处理源程序文件中的预处理指令,预处理器的输出再送给编译器,编译器从 C 语言语法角度检查程序是否正确,如果正确,则生成目标代码文件或机器指令文件。

C 预处理器及 C 编译器的执行顺序及输入输出文件类型,如图所示:

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136789
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73639
  • 预处理
    +关注

    关注

    0

    文章

    33

    浏览量

    10479

原文标题:C语言预处理命令分类和工作原理

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Minitab 数据清理与预处理技巧

    Minitab是一款功能强大的统计分析和质量管理软件,在数据分析过程中,数据清理与预处理是至关重要的环节。以下是一些在Minitab中进行数据清理与预处理的技巧: 一、数据导入与格式调整 导入数据
    的头像 发表于 12-02 16:06 330次阅读

    C语言关键字分别发生在哪个阶段

    以下C语言关键字,分别发生在哪个阶段? 第一个,define。 首先得纠正一下,define 并不是C语言里面的关键字,即使加了井号,也不是。 define 属于
    的头像 发表于 11-24 10:31 181次阅读

    C55x CSL音频预处理

    电子发烧友网站提供《C55x CSL音频预处理.pdf》资料免费下载
    发表于 09-19 11:30 0次下载
    <b class='flag-5'>C</b>55x CSL音频<b class='flag-5'>预处理</b>

    hex文件如何查看原c语言代码

    处理器可以直接执行的指令,而 C 语言代码则是人类可读的高级编程语言代码。 然而,如果你想要从 .hex 文件中获取一些有用的信息或者对程
    的头像 发表于 09-02 10:37 2260次阅读

    图像识别技术包括自然语言处理

    计算机视觉技术对图像进行处理、分析和理解,从而实现对图像中的目标、场景、行为等信息的识别和理解。图像识别技术包括图像预处理、特征提取、分类器设计、模型训练等多个环节。 1.2 自然语言
    的头像 发表于 07-16 10:54 817次阅读

    机器学习中的数据预处理与特征工程

    在机器学习的整个流程中,数据预处理与特征工程是两个至关重要的步骤。它们直接决定了模型的输入质量,进而影响模型的训练效果和泛化能力。本文将从数据预处理和特征工程的基本概念出发,详细探讨这两个步骤的具体内容、方法及其在机器学习中的应用。
    的头像 发表于 07-09 15:57 413次阅读

    nlp自然语言处理模型怎么做

    自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,它涉及到计算机对人类语言的理解和生成。随着深度学习技术的发展,NLP领域取得了显著
    的头像 发表于 07-05 09:59 635次阅读

    信号的预处理包括哪些环节

    信号预处理是信号处理的一个重要环节,它对信号进行一系列的操作,以便于后续的分析和处理。信号预处理的目的是提高信号的质量,减少噪声,保留有用的信息,以及满足后续
    的头像 发表于 06-03 10:35 2996次阅读

    一招掌握C语言代码如何变成bin文件?

    的第一步。预处理器采取预处理指令处理诸如宏定义(#define)、条件编译(#ifdef,#ifndef,#endif)等。此步骤的输出是扩展的源代码,包含所有头
    的头像 发表于 04-13 08:10 3239次阅读
    一招掌握<b class='flag-5'>C</b><b class='flag-5'>语言</b>代码如何变成bin文件?

    C预处理器及其工作原理

    C预处理器(C Pre-Processor)也常简写为 CPP,是一个与 C 编译器独立的小程序,预编译器并不理解 C
    的头像 发表于 03-12 14:14 635次阅读
    <b class='flag-5'>C</b><b class='flag-5'>预处理</b>器及其工作原理

    C语言#define的应用

    C/C++ 编程语言中,当程序被编译时,被发送到编译器,编译器将程序转换为机器语言,然后完成编译并执行该程序。预处理器也称为宏
    发表于 03-06 11:29 379次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>#define的应用

    C语言中的预处理

    所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理指令应从第一列开始。
    发表于 03-01 12:16 912次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>中的<b class='flag-5'>预处理</b>器

    介绍C语言中错误处理和异常处理的一些常用的方法和策略

    C语言是一种低级的、静态的、结构化的编程语言,它没有提供像C++或Java等高级语言中的异常处理
    的头像 发表于 02-28 14:25 618次阅读

    C语言中的错误处理机制解析

    C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。
    的头像 发表于 02-26 11:19 512次阅读

    C语言中的头文件

    #include 指令会指示 C 预处理器浏览指定的文件作为输入。预处理器的输出包含了已经生成的输出,被引用文件生成的输出以及 #include
    发表于 02-23 14:06 463次阅读