您的位置:首页 > 编程语言 > C语言/C++

C语言预处理指令

2015-11-02 16:52 495 查看
1、宏定义

一、不带参数的宏

/**宏命令 预处理指令*/
//1、不带参数的宏
#define COUNT 4

char chars[COUNT]={'a','b','c','d'};

for (int var = 0; var < COUNT; var++) {

printf("%c",chars[var]);

}
printf("\n");
#undef COUNT;//结束宏定义

//      printf("count:%d",COUNT);//不能识别


二、带参数的宏

//2、带参数的宏
#define  sum(a,b) ((a)+(b))

#define  ji(x) ((x)*(x))//注意加上小括号,否则对于复杂的四则运算容易出错

int result= sum(1,ji(5));

printf("result:%d\n",result);


2、条件编译

//条件编译

#define  COUNT 9

#ifdef COUNT
printf("定义了count!\n");

#else
printf("没有定义了count!\n");

#endif

#undef COUNT
#ifndef COUNT
printf("没有定义了count!\n");

#endif

/**
* 定义了count!
没有定义了count!
* */

//文件包含 防止重复编译头文件
//例如:test.h 系统会自带文件宏定义和条件编译 防止重复包含,重复编译

#ifndef TEST_H
#define TEST_H //定义一个空文件

#endif


3、typedef

一、数据类型

//typedef
typedef int Myint;//基本数据类型
Myint a=12;

typedef char * String;//char 数组
String name="lili";

//结构体
/**
struct Person
{

int age;
String name;
};

typedef struct person  Myperson;*/

//可以精简为下面这种写法
typedef struct Person
{
int age;
String name;

} Myperson;

Myperson mp={22,"lilei"};

//结构体方式二   有上面的观察可以发现 Person完全没有必要写,下面这种更精简的方式

typedef struct
{
int age;
int code;
String name;

} MyStudent;

MyStudent ms={27,100,"wei"};

//结构体指针

//正常的写法
/**struct Person2
{
int age;
String name;

};

struct Person2 *  pp;*/

//typedef写法
typedef struct Person2
{
int age;
String name;

} * personPoint;

struct Person2 p2={20,"zhizhen"};

personPoint pp=&p2;

//枚举

enum Sex{man,woman};

typedef enum Sex MySex;

typedef enum Season
{
Spring,
summr,
autuom,
winter

} MySeason;

MySex msex=man;

MySeason msn=winter;

printf("myint :%d\n",a);
printf("String:%s\n",name);
printf("myperson:name:%s\tage:%d\n",mp.name,mp.age);
printf("mystudent:name:%s\tage:%d\tcode:%d\n",ms.name,ms.age,ms.code);
printf("personPoint:name:%s\tage:%d\n",(*pp).name,(*pp).age);

//结果:
//    myint :12
//    String:lili
//    myperson:name:lilei   age:22
//    mystudent:name:wei    age:27  code:100
//    personPoint:name:zhizhen  age:20


二、函数

//函数
int (*Mycount)(int,int);

Mycount=∑

printf("%d\n",Mycount(10,18));

Mycount=−

printf("%d\n",Mycount(10,18));

//typedef 写法

typedef int (*NewMycount)(int,int);

NewMycount nsum=sum;
NewMycount nminus=minus;
printf("%d\n",nsum(10,18));
printf("%d\n",nminus(10,18));

//     28
//     -8
//     28
//     -8


4、typedef 注意事项

//typedef注意事项

typedef char * String;

#define String2 char *

String s1,s2;//s1,s2都为char * 类型

s1="jim";
s2="lili";

String2 s3,s4;

s3="leifeng";

//     s4="lilei";这句报错了  为啥呢?
//       提示:char 类型不能转换为 char *,不对啊?s4 不应该是char * 类型么? 这是 因为宏定义 是这样替换的

/***
* String2 s3,s4 ----> char * s3,s4;  仅只有s3是char *类型
*
*
* /
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: