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指令可能导致多次包含同一头文件,降低编译效率
    */
  • 相关阅读:
    trackr: An AngularJS app with a Java 8 backend – Part III
    trackr: An AngularJS app with a Java 8 backend – Part II
    21. Wireless tools (无线工具 5个)
    20. Web proxies (网页代理 4个)
    19. Rootkit detectors (隐形工具包检测器 5个)
    18. Fuzzers (模糊测试器 4个)
    16. Antimalware (反病毒 3个)
    17. Debuggers (调试器 5个)
    15. Password auditing (密码审核 12个)
    14. Encryption tools (加密工具 8个)
  • 原文地址:https://www.cnblogs.com/0515offer/p/4581763.html
Copyright © 2011-2022 走看看