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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Xshell连接不上虚拟机Linux系统

    Xshell连接不上虚拟机Linux系统以下是我在尝试网上各种办法之后总结的最优解决办法 1 先在主机上检查虚拟机相关的必要的服务是否都已经启动 2 检查虚拟机系统防火墙是否处于关闭状态 3 检查虚拟机系统的 ssh 服务是否已经启动 4 检查 ifcfg eth0 文件是否配置正确文件路径 etc sysconfig network scripts ifcfg eth0 本人虚拟机配置截图 网段查看 VmwareWo

    2025年8月26日
    2
  • linux 查看内存大小命令,Linux查看命令:CPU型号,内存大小,硬盘空间「建议收藏」

    linux 查看内存大小命令,Linux查看命令:CPU型号,内存大小,硬盘空间「建议收藏」#cat/proc/cpuinfo|grep”physicalid”|uniq|wc-l说明:uniq命令:删除重复行;wc–l命令:统计行数1.2查看CPU核数#cat/proc/cpuinfo|grep”cpucores”|uniqcpucores:4说明:cpu核数为41.3查看CPU型号#cat/proc/cpuinfo|grep’mo…

    2025年5月22日
    3
  • RBF(径向基)神经网络

    RBF(径向基)神经网络

    2021年11月20日
    45
  • 学成在线项目怎么样(学成在线微服务)

    CMS接口开发1项目的功能构架1.1项目背景1.2功能模块1.3项目原型2项目的技术架构2.1技术架构2.2技术栈2.3开发步骤3CMS需求分析3.1什么是CMS3.2静态门户工程搭建3.2.1导入门户工程3.2.2配置虚拟主机 在nginx中配置虚拟主机:3.2.3SSI服务端包含技术3.3CMS页面管理需求4CMS服务端工程搭建注释也是必不可少的KaTeX数学公…

    2022年4月16日
    42
  • mysql联合索引的底层原理_聚集索引原理

    mysql联合索引的底层原理_聚集索引原理面试中被问到了联合索引,突然就涉及到了知识盲区,对不起,我只知道B+树,B树,哈希索引,聚簇索引,非聚簇索引,联合索引的原理?。。对不起涉及到了我的知识盲区了。这里对联合索引做一个总结,联合索引,顾名思义,普通的索引我们只会对单个字段去构建索引,又分为主键索引和辅助索引,那么联合索引就是对多个字段去构建索引,从而在某些场景下提升提升查询效率。最左匹配原则提到联合索引,不得不提的就是最左匹配原则所谓最左原则指的就是如果你的SQL语句中用到了联合索引中的最左边…

    2025年9月16日
    6
  • 3D实例分割「建议收藏」

    3D实例分割「建议收藏」13D实例分割-云+社区-腾讯云2提出“3D-BoNet”,比3D点云实例分割算法快10倍!

    2022年8月23日
    8

发表回复

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

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