//#import 与 #include 相比能够防止重复导入,保证内容值只复制一个.
//#include "A.h"
//#include "A.h"
//多个include 修改如下:
#ifndef lessonPointHigher_A_h
#define lessonPointHigher_A_h

int max(int x ,int y)
{
    return x > y ? x :y;
}

#endif

//宏  ,只做替换  //#开头 指令
//命名规则: 1. 全大写  2. k + 驼峰(多个单词组成,每个单词的首字母大写.)
//例如 MAX 或者 kMax
//宏 不是变量
//#define 用来定义宏 COUNT 宏名

//无参宏
#define COUNT 10   //后面不要加分号
//在预编译阶段 COUNT 全部换成 10

//使用宏 应注意的问题:
//1.定义宏时,最后不能加分号.分号也会成替换内容的一部分
//2.参数要加括号
//3.对于有参数宏,宏名与括号之间不能加空格


//有参宏
#define SUM(A,B) ((A) + (B))
//如果先算宏内的运算 定义宏时,加括号  #define SUM(A,B) ((A) + (B))
//宏不限制数据类型
//宏 只是替换功能
//SUM(5,10) * SUM(5, 10)  等于 65


#define AAAA
int main(int argc, const char * argv[])
{
    //条件编译 根据条件来编译不同的代码 ,编译期会将源文件编译成二进制指令,存放在代码区.条件编译经常用来调试程序.
    //条件编译 第一种形式
    //#ifdef 标识符 代码段1 #else 代码段2 #endif
    //如果标识符通过#define 定义过,则编译代码段1 , 否则编译代码段2 . #endif 是编译的结束标志.
    
#ifdef AAAA
    int a =10 ;
#else
    int  a= 20;
#endif
    printf("a = %d\n", a);
    //条件编译 第二种形式
    //#ifndef 标识符 代码段1 #else 代码段2 #endif
//如果标识符没有通过#define 定义过,则编译代码段1 , 否则编译代码段2 . #endif 是编译的结束标志.
#ifndef AAAA
    int b =10 ;
#else
    int  b= 20;
#endif
    printf("b = %d\n", b);
//条件编译 第二种形式
    //#if  常量表达式 代码段1 #else 代码段2 #endif
    //如果 常量表达式 结果非 0  编译器编译代码段1 否则编译代码段2
#if 1
    int c = 10;
#else
    int c= 20 ;
#endif

 //结构体指针访问结构体成员,通过指向操作符, 例如:结构体指针变量->结构体成员;
//    printf("%s \n" ,pStu->name);
//    strcpy(pStu->name, "xiaoguang");
//    printf("%s \n" ,pStu->name);
//  //  pStu ++ ;  //增加的是整个结构体的大小.
//    // *pStu 和 xiaoguang 的功能是一样的.都是获取到结构体的内容.