//
// 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\n",A);
int a=average(
4,
6);
printf("平均值是:%d\n",a);
int rst = Pow(
10)/Pow(
2);
printf("%d\n",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\n",s);
printf("%f,%f\n",point.x,point.y);
printf("%f,%f\n",p->x,p->
y);
printf("%s\n",a);
#if defined(MAX)
printf("定义过MAX宏定义\n");
#else
printf("没定义过MAX宏定义\n");
#endif
#ifdef MAX
printf("定义过MAX宏定义");
#else
printf("没定义过MAX宏定义\n");
#endif
return 0;
}
#endif
/*
文件包含
这个我们早接触过,就是#include,它可以将一个文件的全部内容拷贝到另一个文件中
#include <文件名> --->直接到C语言库函数头文件所在的目录中寻找文件
#include "文件名" --->用于自定义的头文件,查找顺序先在源程序的当前目录找 -->操作系统的path路径-->C语言库函数头文件所在的目录
注意
1、#include允许嵌套,不允许递归
2、使用#include指令可能导致多次包含同一头文件,降低编译效率
*/
转载于:https://www.cnblogs.com/0515offer/p/4581763.html
转载请注明原文地址: https://win8.8miu.com/read-1541717.html