C语言预处理

c语言中预处理什么作用,C语言中的三种预处理功能 C语言中的三种预处理功能导语:预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是C语言三种预处理功能,欢迎阅读:指令 用途# 空指令,无任何效果#include 包含一个源代码文件#define 定义宏#undef 取消已定... 阅读详情

预处理功能主要包括:宏定义,文件包含,条件编译三部分,分别对应宏定义命令,文件包含命令,条件编译命令三部分实现。

预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。

预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

 

指令             用途

 #             空指令,无任何效果

 #include       包含一个源代码文件

 #define        定义宏

 #undef         取消已定义的宏

 #if                如果给定条件为真,则编译下面代码

 #ifdef         如果宏已经定义,则编译下面代码

 #ifndef        如果宏没有定义,则编译下面代码

 #elif          如果前面的#if给定条件不为真,当前条件为真,则编译下面代码

 #endif         结束一个#if……#else条件编译块

 #error         停止编译并显示错误信息

 #else                     条件编译的否则选项

 #error         指令将使编译器显示一条错误信息,然后停止编译。

 #line          指令可以改变编译器用来指出警告和错误信息的文件号和行号。

 #pragma        指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。

 
 
 

文件包含在程序中包含头文件有两种格式:

#include <my.h>

#include "my.h"

第一种方法是用尖括号把头文件括起来。这种格式告诉预处理程序在编译器自带的或外部库的头文件中搜索被包含的头文件。

第二种方法是用双引号把头文件括起来。这种格式告诉预处理程序在当前被编译的应用程序的源代码文件中搜索被包含的头文件,如果找不到,再搜索编译器自带的头文件。

采用两种不同包含格式的理由在于,编译器是安装在公共子目录下的,而被编译的应用程序是在它们自己的私有子目录下的。一个应用程序既包含编译器提供的公共头文件,也包含自定义的私有头文件。采用两种不同的包含格式使得编译器能够在很多头文件中区别出一组公共的头文件。     

 

举个例子:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
#define SIX 6
#define SEVEN 7
#define Cube(x) (x)*(x)*(x)
#define VERSION "tzs"
#define PASTE(n) "最终胜利者是:"#n
#define NUM(a,b,c) a##b##c
#define STR(a,b,c) a##b##c
#define DEBUG 1
 
int main()
{
    int i;
    i = SIX + SEVEN;
    printf("i = %d\n",i);
    i = (SIX * SEVEN);
    printf("i = %d\n",i);
 
    i = Cube(3);
    printf("i = %d\n",i);
 
    printf("%s",VERSION);
    printf("%s",PASTE(桃子));
    puts(PASTE(yy/));
    puts(PASTE(xx));
 
    printf("%d\n",NUM(1,2,3));
    //printf("%s\n",STR("aa","bb","cc"));
 
    #if DEBUG
        printf("Debugging\n");
        printf("Debugging2222\n");
    #endif
        printf("Running\n");
    #if defined DEBUG
        printf("yes\n");
    #endif
    #if !defined JJ
        printf("no JJ\n");
    #endif
 
}

结果为:

i = 13
i = 42
i = 27
tzs最终胜利者是:桃子最终胜利者是:yy/
最终胜利者是:xx
123
Debugging
Debugging2222
Running
yes
no JJ
 

C语言——预处理指令 return 0;这里是可以编译通过的,运行结果也是对的:;;return 0;这里编译器会报错:这里是有语法错误的。在C语言中,#include是一个预处理指令,用于将一个源文件的内容插入到另一个源文件中。这通常用于包含标准库或自定义库的头文件,以便在程序中使用这些库中定义的函数、类型和宏。#include或:用于包含标准库头文件。查找策略是,编译器会在标准库头文件目录中查找这些文件。:用于包含用户自定义的头文件。 阅读详情

相关推荐

【C语言】编译预处理

本文主要介绍了C/C++预处理阶段的相关内容。预处理阶段处理以#开头的指令,包括宏定义、条件编译和头文件包含等操作。文章详细讲解了#define定义常量和宏的方法,分析了宏替换规则及其与函数的区别,并指出宏可能带来的副作用问题。同时介绍了#和##运算符的特殊用法,以及条件编译指令的多种形式。最后,文章阐述了头文件的两种包含方式及其查找策略,并提出了通过条件编译避免头文件重复包含的解决方案。

wangchen_0的博客 1513

预处理的功能

1. 预处理功能是C语言特有的功能,它是在对源程序正式编译前由预处理程序完成的。程序员在程序中用预处理命令来调用这些功能。2. 宏定义是用一个标识符来表示一个字符串,这个字符串可以是常量、变量或表达式。在宏调用中将用该字符串代换宏名。3. 宏定义可以带有参数,宏调用时是以实参代换形参。而不是“值传送”。4. 为了避免宏代换时发生错误,宏定义中的字符串应加括号,字符串中出现的形式参数两边也应加括号。

天高路远 1451

ARM和FPGA之间的通信(硬件原理图篇)

设计该开发板的初衷是为了学习,但也希望今后能扩展其功能,看到大家都在diy示波器,自己也非常冲动的想DIY一把,于是呼选了arm+fpga的方案,fpga主要用来实现数据的高速采样,而ARM则提供数据的显示,以及一些人机交互的功能。那么该方案中最重要的地方就是ARM和FPGA之间的通信如何实现了。在网上查了很多的资料,有说将FPGA作为ARM的一个外设,可以通过DMA的方式来直接访问;也有说把FP

屌yy的博客 5万+

C语言三种预处理功能

目录(?)[+]伪指令(或预处理指令)定义:预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是部分预处理指令:指令 用途 # 空指令,无任何效果 #include 包含一个源代码文件 #d...

MyLinChi的博客 2603

SOI技术解析:绝缘体上硅的结构优势与应用场景

本文深入解析了SOI(绝缘体上硅)技术的核心结构、性能优势与应用场景。SOI通过在硅衬底与器件层之间引入绝缘的埋氧层,实现了优异的电隔离,从而显著降低芯片功耗、提升工作频率并增强抗干扰能力。该技术已广泛应用于5G射频前端、高性能计算、汽车电子及MEMS传感器等关键领域,是推动半导体性能持续提升的重要技术路径。

jj890的博客 403

2025年第十六届蓝桥杯省赛C/C++大学B组 个人题解

也是写了写部分题解,朱波也是狠狠水了个省二┭┮﹏┭┮,毕竟许多算法知识没怎么学。

2301_80173664的博客 2431

预处理功能

在编译器对源程序进行编译之前,首先需要由预处理器对程序文本进行预处理。预处理器提供了一组编译预处理指令和预处理操作符。 预处理指令以“#”开头,单独一行,不用分号,可以出现在程序中任何位置。 1.#include指令 文件包含指令。作用是将另一个源文件加入到当前源文件中该点处。有两种格式: #include <文件名> 按标准方式搜索,文件位于系统目录的include子目录下 #inlude "文件名" 在当前目录中搜索,...

qq_44783613的博客 329

模电专题-MOS管的放大电路分析

在实际应用中,我们经常会使用到功率MOS,这时通常不会将它当成一个开关使用,而是当成一个放大器来使用,那这就需要让其工作在放大状态。参考下图中的mos管的特性曲线,右图中的输出特性曲线中有一根红色的分界线,这个线就是区分mos管工作状态的分界线,在红线的左边,mos管工作在可变电阻区,也就是线性区;在红线的右边mos管工作在恒流区,也就是饱和区。当然,还有一个截止区。本文分析主要运用模电课本中的理论计算验证。

Anitawen的博客 2万+

预处理_预处理功能介绍

基本预处理图像处理的基础是拍摄图像*拍摄清晰的图像(对比度清晰的对焦)。 而预处理功能的运用,可以对图像进行最佳加工,使其适用于检测内容。在设定瑕疵检测/尺寸测量等正式处理之前,实施拍摄及预处理最佳化,可以提高稳定检测的成功率。下面将从原理开始,对最佳预处理功能的选择和设定方法进行说明。基本预处理功能的种类与原理以下将以预处理功能中最常用的4种为例从原理开始进行说明。如下所示,对全部像素进行以各像...

weixin_28822657的博客 1015

多边形裁剪算法

多边形裁剪算法 刚参加工作就跟多边形刚上了,对于多边形的裁剪做一些简单的总结。 多边形裁剪主要有四种算法 Greiner-Hormann裁剪算法 Sutherland-Hodgman算法 Vatti裁剪算法 Weiler-Atherton裁剪算法 作为一名想要成为优秀算法工程师的程序员,我们不能只会使用,而不知道其原理,倘若如此,我们无法做到应用于本身业务上的定制化的修改。 Greiner–H...

papalqi 6729

银河麒麟V10搭建vsftpd

1、查看是否有安装过2、安装3、服务启动步骤设置开机启动并此次立即启动启动重启停止查看状态4、系统防火墙放行ftp服务如果没有重要的数据在服务器里面,或者在本地虚拟机中外网无法访问的情况下,建议直接关闭防火墙即可省略以上繁琐的步骤。

hhq850741642的博客 6484

C语言编译预处理

C语言由源代码生成可执行程序的过程如下: C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件 其中编译预处理阶段,读取C源程序,对其中的预处理指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。 ...

C语言技术网-码农有道 3321

医疗领域BGE-M3模型微调全流程:从数据准备到效果评估

本文详细介绍了医疗领域BGE-M3模型的微调全流程,从数据准备到效果评估。通过医疗数据微调,BGE-M3模型在临床问答、病历检索等场景中表现显著提升,能够准确理解医学术语之间的细微差别。文章还提供了实战练习代码和效果评估指标,帮助开发者快速掌握医疗文本嵌入模型的应用技巧。

weixin_29098367的博客 281

C语言的预处理命令

预处理是C语言的一个重要功能,由预处理程序完成。当对一个源文件进行编译时,系统将自动调用预处理程序对源程序中的预处理部分作处理,之后自动进入对源程序的编译

qq_47896523的博客 7989

AI上推荐 之 NeuralCF与PNN模型(改变特征交叉方式)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【C语言】预处理详解

C语言预处理机制详解 本文全面介绍了C语言预处理阶段的关键概念和实用技巧,主要内容包括: 预定义符号:介绍了C语言内置的__FILE__、__LINE__等预定义符号及其用法 #define定义常量:讲解了基本语法和使用注意事项,通过预处理阶段代码替换实例展示原理 宏定义:详细解析了带参数宏的定义方法,重点强调括号使用对运算优先级的影响 副作用问题:通过实例演示宏参数带副作用时可能产生的意外结果 替换规则:系统阐述了宏替换的三个关键步骤:参数预扫描、参数替换和宏体展开 与函数对比:从执行效率、类型通用性、调

suxi_na的博客 1413

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【C语言】预处理

1. 从源文件到可执行文件的过程 2. 预处理指令 3. 宏定义 4. 文件包含 5. 条件编译

Qiuhan_909的博客 2998

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C语言的预处理详解

说到预处理,大家绝对不会觉得陌生。因为我们在开始编写一份程序的时候,从键盘录入的第一句话: #include &lt;stdio.h&gt; 这里就使用了预处理,引入头文件。同时在文件开头我们常见的#define ,#ifdef,#pragma之类的都属于预处理。   那么,我们在此先提出几个问题: 1.预处理是C语言的一部分吗? 2.包含#号的都是预处理吗? 3.预处理指令后面是不...

Eyoru的博客 3万+

c语言编译预处理指令大全,C语言预处理指令

「今天是学习C语言第 32天」当你选择了一种语言,意味着你还选择了一组技术、一个社区。——Joshua Bloch# 预处理C语言源程序先经过预处理器进行预处理,之后经过编译器编译成二进制可执行代码执行。一般编译器套件、集成开发工具都将两种工具集成,预处理过程和编译过程一并处理。C语言预处理是通过预处理指令实现,每个预处理指令以#符号开头,以行为单位,实现编译前的准备工作,例如文件条件引入、宏替...

weixin_33134753的博客 3218

C语言-编译预处理

也称为宏替换。由宏定义的命令完成。分为有参宏和无参宏。# define 标识符 字符串#define为宏定义的命令。标识符为所定义的宏名。字符串可以是常数、表达式、格式串等。宏定义不是一条语句,它是一条命令。如果加了分号,分号作为宏字符串的一部分。宏的作用域为宏定义命令开始起到源程序结束。如果要终止其作用域(提前结束),可使用#undef命令。宏定义的字符串中可以使用已经定义的宏名,宏展开时由预处理程序层层替换。#define PI3.14159#define 标识符。

qq_33892084的博客 1576

c语言预处理

C语言以C关键字、表达式、语句,以及这些元素的使用规则为基础。ANSI C标准不仅描述了C语言,还描述了C预处理器的工作机制。在 编译之前 ,先由预处理器检查程序,根据程序中使用的预处理器指令,使用符号缩略语所代表的内容替换程序中的缩略语。 预处理之前的翻译 在程序预处理之前,编译器会先做几次翻译处理。编译器先把源代码中出现的字符映射到源字符集。该过程处理多字节字符和使C外观更加国际化

u010645943的专栏 603
上一篇: *1032挖掘机技术哪家强(20)
下一篇: 写递归函数的正确思维方法
donCoder
博客等级 码龄9年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值