zoukankan      html  css  js  c++  java
  • 枚举和预处理

    //
    //  main.c
    //  枚举和预处理
    //
    //  Created by qianfeng on 15/6/3.
    //  Copyright (c) 2015年 qianfeng. All rights reserved.
    //
    
    #include <stdio.h>
    
    /*
     枚举:用于声明一组常数
     定义:enum 枚举名 {枚举元素1,枚举元素2,...}
     注意
     1、C语言会将枚举元素作为整型常量处理
     2、默认第一个枚举元素是0,第二个是1,依次顺序加1
     3、也可以在定义的时候改变枚举的值
     enum Season{spring,summer,autumn=5,winter};  winter就是6
     */
    #if 0
    int main(int argc, const char * argv[]) {
        //1、先定义枚举类型再定义枚举变量
        enum Season{spring,summer,autumn,winter};
        enum Season s;
        //2、定义枚举类型的同时定义枚举变量
        enum Sesson2{Spring,Summer,Autumn,Winter} s2;
        //3、省略枚举名称,之间定义枚举变量
        enum {a,b,c} ch;
        ch=a; //等价于ch=0;
        ch=2; //等价于ch=c;
        //遍历枚举元素
        for(s=spring;s<Winter;s++){
            printf("%d ",s);
        }
        return 0;
    }
    #endif
    
    /*
     预处理 C语言编译之前,会对一些特殊的预处理指令作解释,产生一个新的源程序,再之后才是通常的编译
     以#开头,并且结尾不用分号
     预处理指令主要有:宏定义、条件编译、文件包含
     作用范围:从定义的那一行开始到文件结束
     例:#include <stdio.h>
    
     宏定义  常用来定义常量
     #define 宏名 字符串
     #define PI 3.14
     作用:在编译预处理时,将源程序所有宏名替换成后面的字符串
     #undef 宏名 -->终止宏的作用域
     
    
     宏定义与函数的区别
     1、宏定义不涉及存储空间的分配、参数类型的匹配、返回值问题
     2、函数调用在程序运行时执行,而宏替换只在编译预处理阶段进行,所有带参数的宏定义比函数具有更高的执行效率
     */
     #if 0
    #define A 3.14
    //#undef A
    //带参数的宏定义
    #define average(a,b) (a+b)/2
    
    //
    #define Pow(a) ((a) * (a))
    int main(int argc, const char * argv[]) {
    
        printf("%f
    ",A);
        int a=average(4,6);
        printf("平均值是:%d
    ",a);
        int rst = Pow(10)/Pow(2);
        printf("%d
    ",rst);
        
        return 0;
    }
    #endif
    
    /*
     条件编译
     一部分代码块满足一定条件才进行编译
     #if 条件1
     ...code1....
     #elif 条件2
      ...code2....
     #else
      ...code3....
     #endif
    */
    
    #if 0
    #define MAX 10
    int main(int argc, const char * argv[]) {
    #if MAX==0
        printf("MAX是0");
    #elif MAX>0
        printf("MAX大于0");
    #else
        printf("MAX小于0");
    #endif
        return 0;
    }
    #endif
    
    /*
     #if defined()和#if !defined()
     #if defined(宏名) //判断是否定义过宏,定义过就将code编译进去
     ...code...
     #endif
     
     #ifdef和#ifndef用法跟if defined()和#if !defined()的用法基本一致,判断是否定义
     #ifdef MAX
     ...code...
     #endif
    */
    #if 0
    typedef char * String;//给指针取别名
    //定义结构体并取别名,struct后面的结构体名省略了,别名在后面Point
    typedef struct {
        float x;
        float y;
    }Point;
    typedef Point * PP;//起别名
    
    enum Season {spring, summer, autumn, winter};
    //给枚举取别名,使用时可以省前面的修饰enum
    typedef enum Season Season;
    int main(int argc, const char * argv[]) {
        String a = "1231231";
        Point point = {10,20};
        PP p = &point;
        //enum Season s = spring;
        Season s=spring;
        printf("spring=%d
    ",s);
        printf("%f,%f
    ",point.x,point.y);
        printf("%f,%f
    ",p->x,p->y);
        printf("%s
    ",a);
    #if defined(MAX)
        printf("定义过MAX宏定义
    ");
    #else
        printf("没定义过MAX宏定义
    ");
    #endif
        
    #ifdef MAX
        printf("定义过MAX宏定义");
    #else
        printf("没定义过MAX宏定义
    ");
    #endif
        return 0;
    }
    #endif
    
    
    /*
     文件包含
     这个我们早接触过,就是#include,它可以将一个文件的全部内容拷贝到另一个文件中
     #include <文件名>  --->直接到C语言库函数头文件所在的目录中寻找文件
     #include "文件名"  --->用于自定义的头文件,查找顺序先在源程序的当前目录找 -->操作系统的path路径-->C语言库函数头文件所在的目录
     
     注意
     1、#include允许嵌套,不允许递归
     2、使用#include指令可能导致多次包含同一头文件,降低编译效率
    */
  • 相关阅读:
    GridView多行多列合并单元格(指定列合并)
    项目管理知识体系指南PMBOK指南
    作业调度框架 Quartz.NET 2.0 beta 发布
    外语学习有助于大脑发育
    抢书之JS版
    mac 安装python和Django开发环境
    戏谈一道面试题
    —安装时填写注册表
    深入浅出SQL Server Replication第一篇:走近Replication(上)
    IIS寄宿方式的Web地址、BaseAddress和EndPoint Address的关系
  • 原文地址:https://www.cnblogs.com/0515offer/p/4581763.html
Copyright © 2011-2022 走看看