A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 仰望星空的猪 中级黑马   /  2015-11-23 19:04  /  784 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 仰望星空的猪 于 2015-11-23 19:23 编辑

1   1  typedef使用
简单说就是给已存在的数据类型起别名。
形式
typedef 原类型名 新类型名;

1)typedef与基本数据类型
typedef int  INT;
定义之后 INT就可以代替int 使用。
2)typedef与数组

typedef int ARRRY[5];

ARRRY arr; //等效于 int a[5];
3)typedef与结构体
struct Person{
        int age ;
        char *name[20];
};

typedef  struct PersonP;

P 的作用等效 struct Person

定义结构体的时候起别名。
typedef struct Car{
        成员变量列表;
}CAR;

匿名结构体起别名
typedef struct {
        成员变量列表;
}CAR;

3)typedef与枚举
类似结构体
typedef enum Color{ } COLOR;
4)typedef 与函数指针

int (*p)(int,int);

typedef int (*F)(int,int);

F p;   //等效于int (*p)(int,int)


2     预处理指令

在c语言中,以 # 开头的命令。 include  define和条件编译。

1) 有参宏
#define 宏名 宏值(可以是常量、变量和表达式)

宏替换
编译之前把宏替换为宏值。完全替换不会添加或减少其他字符。

       注意
       宏名一般大写
       宏定义不是语句,末尾无分号
       宏定义必须写在函数之外,作用域从定义开始到程序末尾或者取消宏定义的地方。
#undef 宏名

2) 有参宏
#define 宏名(形参表) 字符串

#define SUM(a)  a+a
#define SUM(x,y)  x*y+x+y
#define SUM(x)   x*y+x+y  //使用时需要提前定义y

              注意
宏替换时会把宏带入,同时会把参数的值带入
宏名和参数之间不能有空格。
形参不分配内存单元不需要定义类型。只是符号代换。
              参数最好用小括号括起来。
      
              举例使用有参宏求两个数最大值
                     #defineMAX(a,b)  a>b?a:b
3) typedef 和define区别
都可以起别名

#define INT int *
tepydef int *  INTER
宏使用的时候只是展开
INT a ,b ;//等效 int * a ,b;
INTER a ,b ;//等效与 int *a ;int* b;

4) 条件编译
根据不同的条件编译不同的程序部分,产生不同的目标文件。
条件编译指令
#if 常量表达式
        程序段1
        #elif
#endif



条件编译&代码调试打印日志
#ifdef 宏名
        代码段
#else
        代码段
#endif
检测是否定义了宏名
DEBUG这个宏系统已经定义 默认值为1

设置显示调试信息的宏
#define  DEBUG== 1  
        #Log(format,…) printf(format,##__VA_ARGS__); //format 为形参 …表示参数可以为1个或者多个。##表示可以为0个参数。
#else

        #Log(format,…);

#endif

3     static和extern

static 和extern 都可以修饰变量。
        static修饰的变量,内部变量,只有包含变量定义的源代码的文件都可以访问
        extern修饰的变量,外部变量,所有的文件都可以访问,只要有声明就行。


static对局部变量作用: 延长局部的生命周期,但是没有改变作用域。变量不销毁
                                     变量的声明只在第一次调用时执行。
extern 不能修饰局部变量。

static对全局变量的作用:全局变量只能在当前文件中使用。(内部变量)
extern 对全局变量的作用:可以在除自身文件之外的文件中使用。(外部变量)
                                           与其他文件中的全局变量不能同名。
                                           全局变量默认为外部变量。
static修饰函数   自能在自身文件中访问 (内部函数)
extern 修饰函数  可以在其他文件中使用。(外部函数)默认
可以通过调用外部函数,外部函数调用内部函数,实现不同文件之间的函数调用。




2 个回复

正序浏览
笔记很不错,写得很认真,值得借鉴学习!
回复 使用道具 举报
不错哦加油不错哦加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马