C基础第21课--宏定义与使用分析

学习自狄泰软件学院唐佐林老师C语言课程,文章中图片取自老师的PPT,仅用于个人笔记。


实验1 : 宏是被预处理器所处理的,预处理器只进行简单的文本替换,不会进行语法检测

实验2 : 宏表达式的强大和易出错

实验3:宏的作用域,对于宏而言 是没有作用域限制的,作用域的概念是针对C语言里面的变量和函数的,不针对宏。因为宏是被预处理器处理的,编译器根本不知道宏标识符的存在,所以编译器根本无法将作用域的概念应用于宏!

实验4: 强大的内置宏

在这里插入图片描述

在这里插入图片描述

define 定义出来的宏常量本质是字面量,也就是说 不占用任何的内存空间。

实验1 : 宏是被预处理器所处理的,预处理器只进行简单的文本替换,不会进行语法检测

#define ERROR -1

#define PATH1 "D:\test\test.c"

#define PATH2 D:\test\test.c  //error

#define PATH3 D:\test\    //error  // 宏中的接续符  
test.c



int main()
{
    int err = ERROR;
    char* p1 = PATH1;
    char* p2 = PATH2;
    char* p3 = PATH3;
}

宏是被预处理器所处理的,因此我们判断这几个宏定义的对不对就需要看预处理器出来的结果是否正确,
gcc -E 21-1.c -o 21-1.i 预处理成功,并没有报错。所以预处理器是直接进行文本替换,是不会进行语法检查的,语法检查是由后面的编译器做的工作。编译直接报错。

# 1 "21-1.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "21-1.c"

int main()
{
    int err = -1;
    char* p1 = "D:\test\test.c";
    char* p2 = D:\test\test.c;
    char* p3 = D:\testtest.c;
}




mhr@ubuntu:~/work/C$ 
mhr@ubuntu:~/work/C$ 
mhr@ubuntu:~/work/C$ gcc -E 21-1.c -o 21-1.i
mhr@ubuntu:~/work/C$ ll
total 28
drwxrwxr-x 2 mhr mhr 4096 Jan 11 19:23 ./
drwxrwxr-x 4 mhr mhr 4096 Dec 15 03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值