c语言-预处理指令

本文介绍了C语言的预处理指令,包括宏定义、无参宏定义的注意事项、带参宏定义、文件包含以及条件编译指令。通过实例解析了宏展开的过程,强调了宏定义与typedef的区别,并探讨了条件编译在程序开发中的应用。

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------



预处理指令概述


在C语言中,多次会用到以“#”靠头的预处理命令,比如说包含命令#include,宏定义命令#define等 ,这是我们最常见的,在源程序中这些命令都是放在行数之外,他们都称为预处理部分。


宏定义


在c语言源程序中允许用一个表示服来表示一个字符串,我们称之为“宏”。被定义为“宏”的表示服称为“宏名”。在编译预处理的时候,程序会对所有出现的“宏名”都用宏定义的字符串去代换,这成为"宏展开“或者“宏代换”


无参宏定义


无参宏的宏名后面不带参数,其定义的一般形式为:   #define 标识符 字符串

其中”#“表示这是一条预处理命令,凡是以”#“开头的均为预处理命令。”define“为宏定义命令。”标识符“为所定义的的宏名(同长用大写字母表示,以便区和变量区分)”字符串“可以是常量,表达式,和格式串等。


2.使用宏定义的优点
1)可提高源程序的可维护性
2)可提高源程序的可移植性
3)减少源程序中重复书写字符串的工作量


#define PI 3.1415926          //PI是宏名,3.1415926用来替换宏名的常数


main() { 


foat radius,length,area,volume;


 printf("Input a radius: ");

cscanf("%f",&radius);


 length=2*PI*radius;                  //引用无参宏求周长
 area=PI*radius*radius;              //引用无参宏求面积

 volume=PI*radius*radius*radius*3/4;       //引用无参宏求体积

     printf("length=%.2f,area=%.2f,volume=%.2f"n", length, area, volume);

}

3.无参宏的注意:

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
### C语言预处理指令种类 C语言中的预处理指令是在编译之前由预处理器执行的命令,这些指令以`#`开头。以下是C语言中常见的预处理指令及其功能说明[^1]: - **`#define`**:用于宏定义,可以定义常量或函数宏。 ```c #define PI 3.14159 ``` 此外,还可以定义带参数的宏[^2]: ```c #define SQUARE(x) ((x) * (x)) ``` - **`#undef`**:用于取消已定义的宏。 ```c #undef PI ``` - **`#include`**:用于包含其他文件的内容,通常用于包含头文件。 ```c #include <stdio.h> #include "myheader.h" ``` - **`#if`**:根据条件判断是否编译某段代码。如果条件为真(非零),则编译该段代码。 ```c #if CONSTANT_EXPRESSION // 编译此代码块 #endif ``` - **`#ifdef`**:如果某个宏已被定义,则编译接下来的代码块。 ```c #ifdef DEBUG printf("Debug mode is on.\n"); #endif ``` - **`#ifndef`**:如果某个宏未被定义,则编译接下来的代码块。 ```c #ifndef DEBUG printf("Debug mode is off.\n"); #endif ``` - **`#elif`**:用于在`#if`或`#ifdef`之后添加额外的条件分支。 ```c #if CONSTANT_EXPRESSION1 // 编译此代码块 #elif CONSTANT_EXPRESSION2 // 编译此代码块 #endif ``` - **`#else`**:用于在前面所有条件都不满足时编译一段代码。 ```c #if CONSTANT_EXPRESSION // 编译此代码块 #else // 编译此代码块 #endif ``` - **`#pragma`**:用于向编译器发出特殊的指令,具体行为依赖于编译器实现。 ```c #pragma once ``` - **特殊预定义宏**:一些预定义宏提供了关于源文件的信息。 - `__LINE__`:当前源文件的行号。 - `__FILE__`:当前源文件的名称。 - `__DATE__`:文件编译日期。 - `__TIME__`:文件编译时间。 - `__STDC__`:如果编译器遵循ANSI C标准,则定义为1。 ```c #include <stdio.h> int main() { printf("Line: %d\n", __LINE__); // 当前行号 printf("File: %s\n", __FILE__); // 文件名 printf("Date: %s\n", __DATE__); // 编译日期 printf("Time: %s\n", __TIME__); // 编译时间 printf("STDC: %d\n", __STDC__); // 是否符合ANSI C标准 return 0; } ``` 以上是C语言中常用的预处理指令列表及其使用方法[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值