C++/C中的预处理命令;
2016-03-12 12:10
323 查看
<分析>:
预编译又称为预处理 ,是做些代码文本的替换工作。处理 # 开头的指令 , 比如拷贝 #include
包含的文件代码, #define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
c/c++编译系统在对程序进行通常的编译之前,先进行预处理。 c 提供的预处理功能主要有以下三种:1 )宏定义 2 )文件包含 3 )条件编译,以下为使用预处理命令时需要注意的地方:
(1)预处理命令可以放在程序的任何位置;
(2)预处理指令中不容许出现空格;
(3)一行上只能有一条预处理命令,一个预处理命令可以放在多行,行尾用‘\’表示;
(4)宏名最好大写,但是不是硬规定;
(5)宏替换不占用程序运行时间,在编译的时候进行;
(6)文件包含#include<filename>是通过系统环境变量指定系统库目录进行查找的, #include“filename”是通过实在的用户目录下查找的,用户的目录就是通过编译器指 定的,如果查找不到再去库文件里查找。库文件可以用<>也可以用“”,但是用户定义 头文件只能用“”,所以<>比””查找范围小;
(7)预编译器在编译的时候按照程序前后顺序就把值一个一个替换进去了,所以它不会考虑运行时候的逻辑关系,例如:
#define a 10
void foo(); // 函数声明
int main(){
printf("%d..",a);
foo();
printf("%d",a);
}
void foo(){
#undef a
#define a 50
}
以上程序输出是10..10
##################################
#define a 10
void foo(){
#undef a
#define a 50
}
int main(){
printf("%d..",a);
foo();
printf("%d",a);
}
以上程序50..50
####################################
预编译又称为预处理 ,是做些代码文本的替换工作。处理 # 开头的指令 , 比如拷贝 #include
包含的文件代码, #define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
c/c++编译系统在对程序进行通常的编译之前,先进行预处理。 c 提供的预处理功能主要有以下三种:1 )宏定义 2 )文件包含 3 )条件编译,以下为使用预处理命令时需要注意的地方:
(1)预处理命令可以放在程序的任何位置;
(2)预处理指令中不容许出现空格;
(3)一行上只能有一条预处理命令,一个预处理命令可以放在多行,行尾用‘\’表示;
(4)宏名最好大写,但是不是硬规定;
(5)宏替换不占用程序运行时间,在编译的时候进行;
(6)文件包含#include<filename>是通过系统环境变量指定系统库目录进行查找的, #include“filename”是通过实在的用户目录下查找的,用户的目录就是通过编译器指 定的,如果查找不到再去库文件里查找。库文件可以用<>也可以用“”,但是用户定义 头文件只能用“”,所以<>比””查找范围小;
(7)预编译器在编译的时候按照程序前后顺序就把值一个一个替换进去了,所以它不会考虑运行时候的逻辑关系,例如:
#define a 10
void foo(); // 函数声明
int main(){
printf("%d..",a);
foo();
printf("%d",a);
}
void foo(){
#undef a
#define a 50
}
以上程序输出是10..10
##################################
#define a 10
void foo(){
#undef a
#define a 50
}
int main(){
printf("%d..",a);
foo();
printf("%d",a);
}
以上程序50..50
####################################
相关文章推荐
- C++ 面试题
- 《你必须知道的495个C语言问题》读书笔记之第4-7章:指针
- 数值的整数次方
- C++中输入输出缓冲区的刷新
- 对C语言中指针的理解与其基础使用实例
- [手游新项目历程]第6天-二进制值和十六进制字符串相互转换的C++代码
- C和C++ const的声明差异
- C和C++ const的声明差异
- 简单了解C语言中直接插入排序与直接选择排序实现
- C++ constexpr类型说明符
- C++ constexpr类型说明符
- 关于C++中友元的理解和应用
- c++中引用和指针的区别
- c++中的模板
- C语言终极面试及答案分析
- C++拷贝构造函数与赋值函数的异同
- 《More Effective C++》Rule7:千万不要重载 &&, ||, 和 ,操作符
- 二进制中1的个数
- C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针
- 学习C++之类与对象