C语言预处理指令
2015-11-02 16:52
495 查看
1、宏定义
一、不带参数的宏
二、带参数的宏
2、条件编译
3、typedef
一、数据类型
二、函数
4、typedef 注意事项
一、不带参数的宏
/**宏命令 预处理指令*/ //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 *类型 * * * /
相关文章推荐
- 基于视频的车辆检测(c语言)
- C语言enum枚举类型解析
- 黑马程序员———OC语言 copy
- 黑马程序员———OC语言 NSDictionary和 NSMutableDictionary的介绍
- VC++ 6.0实用技巧汇总
- 欢迎使用CSDN-markdown编辑器
- 黑马程序员———OC语言 类的声明和实现
- C语言8章函数
- 黑马程序员———C语言 结构体
- 浅谈C++类--隐式类类型转换
- 黑马程序员———C语言 一维数组
- C++基础——类模板
- Student Information System
- 495个C语言问题(摘录)
- 日志库EasyLogging++学习系列(9)—— 性能跟踪功能
- C++ STL中Map的按Key排序和按Value排序
- C++ delete指针的含义
- 第8周项目3 顺序串算法
- 黑马程序员———C语言 分支语句和循环语句
- (C++)字符串分割