c 预处理

Linux C 预处理详解 1.预处理程序 按照ANSI标准的定义,预处理程序应该处理以下指令: #if #ifdef #ifndef #else #elif #endif #define #undef #line #error #pragma #include 显然,上述所有的12个预处理指令都以符号#开始,每条预处理指令必须独占一行。 2.#define #define指令定义一个标识符和 阅读详情
************************************************************ 
C程序设计   知识纲要--预处理命令小结 
Edit   By   Rogers   At   2003-11-01     22:53 
共同进步! Rogers '   Email:   acegeng@sohu.com 
************************************************************ 

【预处理命令】 

预处理命令不是C语言本身的组成部分,不能直接对它们进行编译(编译程序不能识别它们)。所以必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”。 
C语言与其他高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。 

C提供的预处理功能主要有以下三种: 
1.宏定义 
2.文件包含 
3.条件编译 
为了与一般的C语句相区别,这些命令以符号 "# "开头。 

1.宏定义: 
[不带参数的宏定义]:用一个指定的标识符来代表一个字符串。其一般形式为: 
#define   标识符   字符串 
如: #define   PI   3.1415926 
把这个标识符称为“宏名”,在预编译时将宏名替换成字符串的过程称为“宏展开”。#define为宏定义命令。 
宏名一般习惯用大写字母表示,以便与变量名相区别。 
宏定义是用宏名字代替一个字符串,也就是做简单的置换,不做正确性检查。预编译时不做任何语法检查。 
宏定义不是C语句,不必在行末加分号。否则,会连分号一起进行置换。 
可以使用   #undef   命令终止宏定义的作用域。 
在进行宏定义时,可以引用已定义的宏名,可以层层置换。 
对程序中用双括号括起来的字符串内的字符,即使与宏名相同,也不进行置换。 
宏定义只做字符替换,不分配内存空间。 
[带参数的宏定义]:不是进行简单的字符替换,还要进行参数替换。其一般形式为: 
#define   宏名(参数表)   字符串 
如: #define   S(a,b)   a*b 
宏定义时,在宏名与带参数的括号之间不应加空格,否则将空格以后的字符都作为替代字符串的一部分。 
一般用宏来代表简短的表达式比较适合。 

2.文件包含: 
所谓“文件包含”处理是指一个源文件可以另外一个源文件的全部内容包含近来,即将另外的文件包含到本文件之中。 
其一般形式为:   #include   "文件名 " 
#include   <文件名> 
包含文件编译时并不是作为两个文件进行连接的,而是作为一个源程序编译,得到一个目标(.obj)文件。因此被包含的文件也应该是源文件而不应该是目标文件。 
这种常用在文件头部的被包含的文件称为“标题文件”或“头部文件”,常以 "h "为后缀,当然不用 ".h "位后缀,而用 ".c "为后缀或者没有后缀也是可以的。 
头文件除了可以包括函数原型和宏定义外,也可以包括结构体类型的定义 
一个#include命令只能指定一个被包含文件 
文件包含是可以嵌套的。 
在#include   命令中,文件名可以用双引号或尖括号括起来。用尖括号时,系统到存放C函数库头文件所在的目录中寻找要包含的文件,这称为标准方式。 
用双引号时,系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。 
所以,如果为调用库函数而用#include   命令来包含相关的头文件,则用尖括号,以节省查找时间。如果要包含的是用户自己编写的文件,一般用双引号。 

3.条件编译 
有以下几种形式: 
(1) #ifdef   标识符 
程序段1 
#else 
程序段2 
#endif 
(2) 
#ifndef   标识符 
程序段1 
#else 
程序段2 
#endif 
(3) 
#if   表达式 
程序段1 
#else 
程序段2 
#endif 
采用条件编译,可以减少被编译的语句,从而减少目标程序的长度,减少运行时间。

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

相关推荐

预处理(JAVA实现C语言预处理程序).zip

JAVA实现C语言预处理程序。 实现了C语言预处理程序的以下功能: 1.去除C语言源程序中的多余的空白符,将其合并成一个空格(或回车) 2.去除单行注释 3.去除多行注释

[C/C++]C语言的程序环境和预处理

本文主要讲述C语言的程序环境和预处理。 一、程序的翻译环境和执行环境 存在源代码转换为可执行的机器指令的翻译环境和实际执行代码的执行环境,两个不同的环境。 1.翻译环境 每个源文件通过编译过程分别转换成目标代码,每个目标文件由链接器捆绑在一起形成可执行程序。过程图解如图: 编译本身也分为下面几个阶段: VIM编译期间的每一步: (1) 预处理 选项gcc -E...

RMA515T的博客 1万+

CCC数字钥匙3.0标准解读(22)

介绍设备制造商服务器和车辆制造商服务器之间的通信协议.

weixin_41738640的博客 1748

C语言学习之预处理

我们用C语言直接写出来的代码是不能被计算机进行识别的,这其中需要进行一系列过程使源码转换成计算机所能识别的二进制语言,这一系列过程就叫做翻译。源码翻译过程主要有四步:预处理头文件展开去注释宏替换条件编译等编译:将C语言翻译成汇编语言汇编:将汇编语言转化为可重定向目标文件(可被链接,已经是二进制,但不是可执行文件)链接:自身程序+库文件进行关联,形成可执行程序本篇文章我们就来谈谈预处理这个环节,并了解如何定义宏,如何进行条件编译。在C语言中,我们通常使用。

忆梦初心的博客 4808

Parrot OS最新安装教程

Parrot OS和Kali Linux一样是一个基于 Debian 的免费开源 Linux 发行版,适合安全专家、开发人员、以及关心隐私的人。相较于Kali,Parrot OS属于轻量级,对于硬件的要求无需很高,目前版本已更新到6.3。通过按照本教程的方法,能够成功安装Parrot OS。

🦸💻冰草花生酱提醒您“请记得检查所有电子设备的最后登录时间哦⏰🔍” 4431

基于Dify1.9知识库流水线模板的思考——图像和表格数据处理

本文探讨了Dify1.9知识库流水线中LLM节点对文档图像/表格增强处理的优化方案。针对当前仅在内容后追加说明的简单做法,提出了结构化标注的改进方法:通过唯一ID和注释块标记图像/表格及其描述,确保内容可精准对齐。文章详细阐述了该方案的解析处理流程、数据结构化表示方法,以及在RAG检索和文档还原中的具体应用。关键经验包括:必须结构化标注非文本内容、LLM增强的必要性、语义向量化处理等。该方案解决了原始方法在内容重排、相似元素区分和检索精度等方面的问题。

roseey的专栏 1441

【C语言】预处理详解

预处理详解

白晨的博客 1358

ESP32使用microPython控制240x240彩色屏幕显示中文

王铭东老师详细讲解了讲了关于240x240屏幕的一些基础东西,我这里在原功能的基础上拓展了中文显示的功能,顺带修改了实际操作过程中程序中遇到的一些问题。

m0_59452630的博客 1万+

【C语言】详解程序的预处理

C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令。预处理命令属于C语言编译器,而不是C语言的组成部分。通过预处理命令可扩展C语言程序设计的环境。

m0_65679465的博客 1663

LightningChart使用教程:创建 JS 散点图

这是对 LightningChart JS XY 图表一些有趣功能的快速技术研究,以及如何使用 LightningChart JS 创建嵌入式散点聊天和添加自定义交互。 此图表将可视化一个 XY 坐标列表以及一个额外的自定义属性,它只是一段文本。这些自定义属性将与 UI 文本元素一起显示,这些元素将与用户的鼠标移动交互。 我们将介绍的突出功能是: 什么是散点图? 如何创建散点图? 如何将自定义属性附加到数据点。 如何创建交互式 UI 文本元素。 最终结果 什么是散点图? 散点图或散点图是..

Augenstern__zyx的博客 1372

基于fme和python-docx第三方库批量更新不动产调查表

最近应朋友需要批量更新在不动产成果中提交的各种word报表中的指定数据,根据初步的了解,我做了一个基于fme软件和python-docx第三方库进行一个批量的更新方案。

weixin_43229258的博客 1241

C语言:预处理详解

预处理‌是指在C语言源代码被编译之前,由预处理程序对源代码进行的一系列处理过程。这些处理包括宏定义、文件包含和条件编译等,主要目的是为了提高代码的移植性和修改的方便性预处理的具体功能‌宏定义‌:通过#define指令定义宏,可以在程序中用特定的标识符代替一段代码,方便代码的重用和修改‌文件包含‌:使用#include指令将其他文件的内容插入到当前文件中,常用于包含头文件,提供函数声明和宏定义等‌条件编译‌。

2403_87691282的博客 1828

PostgreSQL 实战:行级安全策略(RLS)详解

PostgreSQL的行级安全(RLS)机制实现了细粒度的数据访问控制,通过动态过滤行数据满足多租户隔离、隐私保护等需求。本文系统介绍了RLS的核心原理、配置方法及实践建议:1) 启用RLS后需定义策略,通过USING和WITH CHECK条件控制访问;2) 适用于SaaS、医疗金融等场景,但需注意COPY命令、外键等特殊情况;3) 建议配合会话变量、索引优化和文档化策略使用。文章还提供了多租户隔离等实战案例,并分析了RLS对查询性能的影响及优化方案。RLS将安全控制下沉至数据库层,显著提升应用安全性和可维

数据知道的博客 3153

C语言编译预处理

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

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

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨

zilan23的博客 3652

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C语言预处理

一.预定义符号 二.#define 1.#define定义的标识符常量 2.#define定义宏 3.#define替换规则 4.#和## 5.带副作用的宏参数 6.宏和函数的比较 7.命名约定 三.#undef 四.命令行定义 五.条件编译 1.#if defined(#ifdef) 2.#if !defined(#ifndef) 3.#if 4.嵌套指令 六.文件包含 七.其它预处理指令...

qq_61872165的博客 3419

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【C语言】预处理

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

Qiuhan_909的博客 2998

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C语言的预处理详解

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

Eyoru的博客 3万+

C预处理

​ 预处理器, 预处理器并不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。 预处理指令, c/c++...

三千幻想乡 533

C的预处理

C的宏宏C 预处理器预处理器实例预定义宏二级目录三级目录 宏 C 预处理器 C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。 所有的预处理器命令都是以井号(#)开头。它必须是第一个非空字符,为了增强可读性,预处理器指令应从第一列开始。下面列出了所有重要的预处理器指令: 指令 描述 #define 定义宏

simple_core的博客 208

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

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

weixin_33134753的博客 3218

c语言预处理

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

u010645943的专栏 603
上一篇: Linux操作系统下终端乱码的终极解决方案 export LANG=zh_CN.UTF-8 export LANG=en_US
下一篇: Eclipse同时附加javadoc和android文档(转)
zljjava
博客等级 码龄15年 155粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值