C语言进阶_笔记 第二章 预处理
来源:互联网 发布:程序员在什么系统算 编辑:程序博客网 时间:2024/06/04 19:59
1.文件的包涵方式,明白其区别及不同编译环境下的不同。
#include "文件名"
#include <文件名>
2.宏定义。
由于宏在使用时只是简单的替换,所以定义宏时一定要注意被替代部分的“整体性”,如:
#define A 12+12
#define B 10+10
与
#define A (12+12)
#define B (10+10)
明显后者要安全的多的多的多,例如做运算A*B,用第一种宏肯定是要出问题的。
3.带参宏定义。
在上面的宏中使用“typeof(y) _y = (y)”这样的转换是为了防止x和y为一个表达式的情况,如x=i++,如果不转换,那么i++就会多执行几次操作,得到的就不是想要的结果。如果使用了“typeof(y) _y = (y)”这样的转换,就不会出现这样的问题了。我们可以通过下面一段代面的宏中使用“typeof(y) _y = (y)”这样的转换是为了防止x和y为一个表达式的情况,如x=i++,如果不转换,那么i++就会多执行几次操作,得到的就不是想要的结果。如果使用了“typeof(y) _y = (y)”这样的转换,就不会出现这样的问题了。
注:typeof()是C99标准中添加的。VC++6.0是不支持的,linux系统下的gcc可以很好的支持。
4.变参宏定义。
#define print(...) printf(__VA_ARGS__)
在这个宏中,“...”指可变参数。可变参数的实现方式就是使用“...”所代表的内容替代__VA_ARGS__.在linux下用gcc编译如下代码:
#include<stdio.h>
#define print(...) printf(__VA_ARGS__)
int main()
{
print("hello world------%d\n",1111);
return 0;
}
运行结果为:hello world------1111
预处理中还常常使用“#”和“##”,大大提升了宏的便利性。
#1.## 连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。
#2.#符是把传递过来的参数当成字符串进行替代。
5.宏定义常见错误。
#1.不要在字符串中使用宏,如果宏名出现在字符串中,那么将把宏按照字符串来处理。
定义STR为Hello World,则:printf("字符串中的宏:STR和不在字符串中的宏: %s\n",STR);
的执行结果为:字符串中的宏:STR和不在字符串中的宏: Hello World!
#2.宏中定义指针时一定要注意。如
#define INT_P int *
INT_P p,p1;
我们进行一下宏扩展,将“INT_P p,p1;”扩展为“int* p,p1;”,这是问题就出现了。
6.#pragma指令的使用。
(1).#pragma message("消息")。
(2).#pragma once
如果在头文件的开头部分加入这条指令,那么就能保证头文件只被编译一次。
(3).#pragma hdrstop
该指令表示编译头文件到此为止,后面的无需再编译了。
(4).#pragma pack()
其作用是取消之前设置的字节对齐方式。
- C语言进阶_笔记 第二章 预处理
- C语言-编译预处理_笔记
- C语言进阶_笔记 第四章 数组
- C语言_预处理命令
- C语言-预处理[笔记]
- 【笔记-C语言】 预处理
- 程序设计与C语言学习笔记_第十章编译预处理与位运算
- C语言进阶_笔记 第三章 选择结构和循环结构的程序设计
- 【C】【笔记】《C语言深度剖析》第三章 预处理
- C语言程序设计教程笔记_编译预处理
- C语言进阶-第8~10讲:预处理
- 《C语言进阶》学习笔记
- C语言学习笔记之预处理篇
- C 语言预处理器(笔记)
- C语言深度解析笔记3:预处理
- C语言学习笔记8---预处理
- C语言笔记——预处理
- 014-预处理指令-C语言笔记
- jQuery mobile 学习10 布局的设置
- Oracle 设置开机自启动
- 《清华梦的粉碎》by王垠
- 黑马程序员_流程控制语句
- scala中的call-by-name和call-by-value
- C语言进阶_笔记 第二章 预处理
- C++ Vector的用法
- 程序设计语言的范式
- poj 3613 Cow Relays (floyd快速幂)
- 不让Vim自动生成~备份文件
- 如何将JSON数据通过Get方法获取数据
- 快速搭建节日促销专题
- 数据库权限和角色模型
- MySQL连接字符串总结