编译预处理-条件编译
//#include命令:预编译命令,作用就是将某些文件包含到用户的源文件中来,也就相当于把某个文件中的内容原封不动的贴到#include这个位置
//标准的I/O库:stdio.h叫头文件
#include <stdio.h>//<>就是去系统目录中找头文件 所以像标准的收stdio.h头文件就用<>
#include <stdlib.h>
//""就是现在当前目录中查找,如果找不到,再到系统目录查找 ""就是用于自己写的头文件
#include "head.h"//相当于 #define PI 3.1415926
//#define DEBUG 后面不写1 也算是被定义过了
#define DEBUG 1
#define RELEASE
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {//主函数
//1:文件包含
//将另外的一个文件的内容包含到文件中 我们通过#include命令来实现 一般格式:
//#include "文件名"
//#include 常用于其他.h文件(head) -- 头文件
//我们常常把宏定义 函数说明 甚至一些其他的#include命令 以及其他一些全局变量的外部声明等等放在头文件中
printf("%f\n",PI);
printf("%f\n",DPI);
//说明:
//1 很多公共修改都是可以放到head.h中 但是你一旦修改了这个.h文件也就相当于修改了#include这个头文件的.cpp文件
//那么这些.cpp文件会对其进行重新编译
//2 一个i#nclude只能包含一个文件 如果要包含读个文件 那就多写几个#include
//3 文件包含是可以嵌套的 就是说建一个 head2.h 把#include"head2.h"写在head.h的文件中去
//#include本质上就是把另外一个文件中的内容 搬到本文件中来
//4 #include包含文件 可以用"" 也可以用<> 用法不一样
//2:条件编译:
//对其中的一部分代码进行编译 而不是对所有的代码进行编译
//几种形式:
//形式1:当被标识符定义过(#define),则对程序段1进行编译,否则对程序段2进行编译 #else这部分可以没有
// #ifdef 标识符
// 程序段1(一堆代码)
// #else
// 程序段2
// #endif
//这里就看debug是不是被#define过了 if定义过了 则:
#ifdef DEBUG
//...
printf("x = ,y=.....\n");
#endif
//形式2:当标识符没有被定义过(#define) 则对程序段1进行编译 否则对程序段2进行编译 跟上面的一样#else这部分可以没有
// #ifndef 标识符
// 程序段1(一堆代码)
// #else
// 程序段2
// #endif
//此处没有定义这个定义 则就会打出程序段1
//上面定义的话 则就不会打印出程序段1
#ifndef RELEASE
printf("打印一些调用信息!\n");
#endif
//形式3 当指定的表达式值为真(非0)时就编译程序段1,否则编译程序段2,所以我们事先给定一定的条件 就可以使程序不同条件下实现不同的功能
// #if 表达式
// 程序段1(一堆代码)
// #elif 表达式2
// 程序段2
// #else //如果前面都不成立则编译程序段3
// 程序段3
// #endif
#if PI //PI=0时则执行程序2 PI=1时则执行程序1
printf("PI is defined");
#else
printf("PI is not defined");
#endif
//条件编译的好处
//1条件编译可以减少生成目标文件的长度
//2大家以后开发面临跨平台问题 为了增加程序的移植性 增加程序的灵活性 我们就必须采用条件编译
return 0;
}