C语言学习——预处理命名「建议收藏」

C语言学习——预处理命名「建议收藏」一、宏定义编译:对源程序进行词法、语法分析,生成代码,优化等。作用:在编译之前,对源程序中的特殊命令做一些处理,生成扩展C源程序种类:宏定义 #define文件包含 #include条件编译 #if #else #endif等格式:“#”开头占单独书写行语句尾不加分号2)C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、宏定义

编译:对源程序进行词法、语法分析,生成代码,优化等。
作用:在编译之前,对源程序中的特殊命令做一些处理,生成扩展C源程序
种类:
宏定义 #define
文件包含 #include
条件编译 #if #else #endif等
格式:
“#”开头
占单独书写行
语句尾不加分号
在这里插入图片描述
2)C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实际参数”,这点和函数有些类似。

对带参数的宏,在展开过程中不仅要进行字符串替换,还要用实参去替换形参。

带参宏定义的一般形式为:
#define 宏名(形参列表) 字符串

#define M(y) yy+3y // 宏定义
printf(“S=%d\n”, M(5));

(3)在带参宏定义中,不会为形式参数分配内存,因此不必指明数据类型。而在宏调用中,实参包含了具体的数据,要用它们去替换形参,因此实参必须要指明数据类型。

这一点和函数是不同的:在函数中,形参和实参是两个不同的变量,都有自己的作用域,调用时要把实参的值传递给形参;而在带参数的宏中,只是符号的替换,不存在值传递的问题。

#include <stdio.h>
#define SQ(y) (y)*(y)
int main()
{ 
   
	int a, sq;
	printf("input a number: ");
	scanf_s("%d", &a);
	sq = SQ(a + 1);
	printf("sq=%d\n", sq);
	return 0;
}

在这里插入图片描述
(4) 在宏定义中,字符串内的形参通常要用括号括起来以避免出错。例如上面的宏定义中 (y)*(y) 表达式的 y 都用括号括起来,因此结果是正确的。如果去掉括号,把程序改为以下形式:

#include <stdio.h>
#define SQ(y) y*y

int main()
{ 
   
	int a, sq;
	printf("input a number: ");
	scanf_s("%d", &a);
	sq = SQ(a + 1);
	printf("sq=%d\n", sq);

	return 0;
}

在这里插入图片描述

二、“文件包含”处理

在这里插入图片描述

三、条件编译

条件编译是指预处理器根据条件编译指令,有条件地选择源程序代码中的一部分代码作为输出,送给编译器进行编译。主要是为了有选择性地执行相应操作,防止宏替换内容(如文件等)的重复包含。常见的条件编译指令如下表 所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170991.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu16.04安装cuda9.0(ubuntu18安装nvidia驱动)

    (安装:NVIDIA-384+CUDA9.0+cuDNN7.1)Ubuntu下安装CUDA需要装NVIDIA驱动,首先进入NVIDIA官网,然后查询对应NVIDIA驱动是否支持你电脑的型号。第一步、安装NVIDIAGPU驱动去NVIDIA官网查询是否支持我电脑的GPU如下&amp;nbsp;可以看出:GeForce700MSeries(Notebooks):GeForceGTX…

    2022年4月14日
  • 微信小程序反编译教程_微信小程序防止反编译

    微信小程序反编译教程_微信小程序防止反编译最近写爬虫需要小程序反编译,过程总结下…..通过微信PC版,打开需要反编译的小程序,小程序将产生缓存文件(但他是加密的),通过”小程序解密包”工具将加密的缓存文件解密成为”XXX.wxapkg”文件然后通过wxappunpacker工具反编译下载地址:链接:https://pan.baidu.com/s/1nqg97PxkFTt1TnEWECikYQ提取码:bsu91.找到小程序加密文件微信PC版查看设置->文件管理->打开文件夹然后往上一层返回一步例如:………

    2022年11月1日
  • netdata mysql_Netdata介绍及安装部署

    netdata mysql_Netdata介绍及安装部署Netdata是一款Linux性能实时监测工具。Netdata是Linux系统实时性能监测工具,提供web界面的界面视角。它用可视化的手段,将被监测者最细微的细节,展现了出来。这样,你便可以清晰地了解你的系统和应用程序此时的状况。优美的界面:bootstrap框架下的控制界面自定义的控制界面:你可以使用简单的HTML代码去自定义控制界面(不需要使用javascript)极其的快速而高效:程序…

    2022年10月28日
  • 一款完整的多用户微信公众平台开发源码,带文档免费分享「建议收藏」

    一款完整的多用户微信公众平台开发源码,带文档免费分享「建议收藏」一款集前端展示+用户中心+商家管理系统合三为一的商业强大平台。前端分为首页、产品介绍、注册用户、秒杀、成功案例、联系我们六大模块。

    2022年10月22日
  • 阿里开源数据同步工具–DataX

    阿里开源数据同步工具–DataX下载地址:QuickStartDataX是异构数据源离线同步工具。能够将MySQLsqlServerOracleHiveHBaseFTP之间进行稳定高效的数据同步。设计思路:网状连接-》星型连接目前支持哪些数据同步?:核心架构:推荐使用python2.67不要使用python3,0使用方法和案例:1.准备一个job….

    2022年6月28日
  • ASP.NET微信公众号获取AccessToken

    access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。acces

    2021年12月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号