[C和指针] ch14. 预处理器

第十四章:预处理器

GitHub 链接:ch14. 预处理器

C 语言宏用的很多很多,看看 stdio.h 等各种头文件或者开源项目中的应用就懂了,各种宏定义,坑点也是蛮多的,需要学习并注意。

本章总结及注意点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


部分课后习题解答

14.9 问题

  1. 以前竟然不知道…在 demo01.c 中把本章大大小小的点简单敲了敲。这 5 个宏确实蛮好用的。具体可见参考答案:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZECDAf4e-1609241380564)(https://raw.githubusercontent.com/Y-puyu/picture/main/images/20201229140655.png)]

  2. 见名知意。方便修改、维护。

  3. 考查 __FILE__ 宏及 __LINE__ 的使用,以及参数转字符串的方法, 参数前加 # 即可。见 demo02.c

  4. a. 3 2 3 b. 5 3 5 c. 2 4 20 d. 2 4 12。常规问题。

  5. 经常被调用,那么速度就是最重要的,使用函数开销大,所以使用宏定义来提高速度。

  6. 没看懂这个 process 是啥意思?这个目的是求数组中任一点到终点的后缀和?感觉答案说的不够清楚,有点牵强…参考答案:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c8VsSM85-1609241380566)(https://raw.githubusercontent.com/Y-puyu/picture/main/images/20201229142135.png)]

  7. 这个宏明显具有副作用了,这个依赖性非常危险,很容易造成越界情况,应该是数组元素为奇数的情况下就会产生越界情况。为啥要这样来求 sum 呢?

  8. 没错。这种嵌套的定义有层数的限制,且在此不会到达这个层数限制。首先在此是有条件编译指令的,无论包含哪个文件,首先定义它自己的符号然后把另一个也包括进来。当它试图再次包含第一个时,整个文件被跳过。

  9. sizeof() 在此不能作为一个常量表达式,其值是在预处理器完成后才工作计算的。另一种方法是使用 limits.h 包含文件中定义的值。

14.10 编程练习

  1. 答案上的 # define OK 1 好骚气啊…为啥我的编译器自动缩进…简单的设计即可。见参考答案:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nutbAYAh-1609241380569)(https://raw.githubusercontent.com/Y-puyu/picture/main/images/20201229143346.png)]

  2. #if#elif 的配合使用,最后补一个 #else 即可。其实感觉和 if-else 嵌套一毛一样啊。见 demo03.c

随笔

P291-P292#progma 这不知道是啥意思…我只见过 #pragma#pragma once 哈哈。

宏在大的项目中是经常用到的,看到部分小的开源库、开源项目就各种的宏定义…这块知识不难,但是很显然,自己在课下练习的时候,代码量都比较少,宏用的都比较少,所以这块的知识还是需要留意的。

条件编译经常用来注释代码…用其来调试代码也是很不错的选择。

宏与函数的区别和优劣对比,重要:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-35OgJQxz-1609241380570)(https://raw.githubusercontent.com/Y-puyu/picture/main/images/20201229133555.png)]

疑问

  1. P285 #undef 中说明名字需要被重新定义,要移除后再重新定义。其实可以编译过,但是在我这报一个警告。会以最新的定义将同名的宏覆盖掉。

  2. 预处理器符号。 5 个预处理器定义的符号,挺好用的,注意下就行了。

  3. 命令行定义有点秀,-D 选项,就不需要自己进入代码中重复修改了。-Uname 会将程序中的 name 的初始定义被忽略,一般结合条件编译使用。

  4. 条件编译的嵌套使用,用的太少了。

  5. 文件包含,与嵌套文件包含。#pragma once 保证只声明一次。

  6. #line 这个黑科技,用以修改 __FILE____LINE__

猜你喜欢

转载自blog.csdn.net/yl_puyu/article/details/111935603
今日推荐