【C语言进阶篇】你真的了解预处理吗? 预处理详细解析

发布时间:2023年12月23日

在这里插入图片描述

🎬 鸽芷咕个人主页

?🔥 个人专栏:《C语言初阶篇》 《C语言进阶篇》

??生活的理想,就是为了理想的生活!

一、预定义符号的含义

__FILE__      //进行编译的源文件
__LINE__     //文件当前的行号
__DATE__    //文件被编译的日期
__TIME__    //文件被编译的时间
__STDC__    //如果编译器遵循ANSI C,其值为1,否则未定义

这些预定义符号都是语言内置的,每一个都有它独特的含义。
📚 代码演示:

printf("file:%s line:%d\n", __FILE__, __LINE__);

__FILE__ 指编译的源文件 , __LINE__ 指文件当前的行号,所以这段代码打印的就是是当前文件的名称加行号。

二、#define

2.1 #define定义标识符

语法:

 #define name stuff

📚 代码演示:

#define MAX 1000
#define reg register//为 register这个关键字,创建一个简短的名字
#define do_forever for(;;)  //用更形象的符号来替换一种实现
#define CASE break;case//在写case语句的时候自动把 break写上。
// 如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。
#define DEBUG_PRINT printf("file:%s\tline:%d\t \
                          date:%s\ttime:%s\n" ,\
__FILE__,__LINE__ ,       \
__DATE__,__TIME__ ) 

2.2 在define定义标识符的注意事项

很多人以为#define的定义是一个语句,所以就想当然的给加上了一个语句但是这样就会变成造成很多语法错误,define是替换的作用并不是一条语句

📑示例:

#define MAX 1000;
#define MAX 1000

这样就会导致下面这个情况从而引发语法错误!

if(condition)
 max = MAX;
else
 max = 0;

执行的时候max = MAX;会被替换为max =1000;;,从而导致语法错误

三、#define 定义宏

#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。

宏的申明方式:

#define name( parament-list ) stuff

其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在**stuff**中

注意:
参数列表的左括号必须与name紧邻。
如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。

📚 代码演示:

#define SQUARE( x ) x * x

这个宏接收一个参数 x ,如果在上述声明之后,你把**SQUARE( 5 );**直接放到程序里的话,预处理器就会用下面这个表达式替换上面的表达式:

5 * 5

📝全篇总结

? 归纳:
?? 好了以上就是关于数组类型笔试题要考察的点全部讲解了,不知道大家对数组和数组名是不是有了新的理解呢?
看到这里了还不给博主扣个:
?? 点赞??收藏 ?? 关注

💛 💙 💜 ?? 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
在这里插入图片描述

文章来源:https://blog.csdn.net/qq_57761637/article/details/134724336
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。