经常碰到typedef使用,今天又看到一个是在头文件里的。大体如下:
{{{ #define _GNU_SOURCE
#include <sched.h>
typedef struct cpu_set_t ;
size_t CPU_SETSIZE ;
void CPU_SET(unsigned long cpu , cpu_set_t *set);
void CPU_CLR(unsigned long cpu , cpu_set_t *set);
....................}}}
(就是很多类似的函数声明)
int sched_setaffinity(pid_t pid , size_t setsize , const cpu_set_t *set);
comment1:
这是一个不完整的声明,告诉编译器有struct cpu_set_t 这么一个类型。
一个常用的地方是:假如A、B两个结构互相包含对方的指针:
typedef struct A;
typedef struct B;
struct A
{
struct B *ptr;
/* other stuff */
};
struct B
{
struct A *ptr;
/* other stuff */
};
另一个作用是信息隐藏
/* type.h */
typedef struct _type Type;
void type_XXX (Type *type);
/* ... */
/* type.c */
#include "type.h"
struct _type
{
/* ... */
};
comment2:
总结:
typedef用来声明新的类型名来代替已有的类型名
1. typedef int INTEGER;
typedef float FLOAT;
INTEGER a,b; FLOAT a,b
2. 可以用来声明结构体类型
typedef struct
{ int month;
int day;
int year;
}DATE;
声明新类型名DATE,它代表上面指定的一个结构体类型。这时就可以用DATE定义变量
DATE birthday;
DATE *p; // p为指向此结构体类型数据的指针
还可以进一步:
- typedef int NUM[100]; (声明NUM为整形数组类型)
NUM n; (定义n为整形数组变量)
- typedef char *STRING; (声明STRING为字符指针类型)
string p,s[10]; (p为指针变量,s为指针数组)
- typedef int (*POINTER) (声明POINTER为指向函数的指针类型,该函数返回整形值)
故typedef就是用如同定义变量的方法来声明一个类型
Note:
typedef 与#define有相似之处:
typedef int COUNT;
和 #define COUNT int
作用都是用COUNT代表int。而#define是在预编译时处理的,它只能作简单的字符串替换,而typedef是在编译时处理的,作用是声明一个类型