目录

  • 一.typedef 简介

    • 1.typedef 简化复杂的类型声明

      • A.定义普通变量
      • B.定义函数指针
      • C.定义结构体
    • 2.定义与平台无关的类型
  • 二.define 简介
  • 三.typedef 和 define 区别
    • 1.执行时间不同
    • 2.功能有差异
    • 3.作用域不同
  • 四.猜你喜欢

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.typedef 简介

C 语言 typedef 是为现有的类型起一个别名,使用起来更加的方便,注意:它并没有产生新的类型;

1.typedef 简化复杂的类型声明

A.定义普通变量

typedef int REAL_TYPE;REAL_TYPE a = 10; //等价 int a = 10;
printf("a=%d",a);

B.定义函数指针

//声明了一个返回 bool 类型并带有两个(int和double)形参的
typedef bool (*FuncPointer)(int, double);函数的指针类型FuncPointer
FuncPointer pFunc; //声明了一个FuncPointer类型的函数指针对象pFunc

C.定义结构体

**在 C 语言中,如果定义结构体的时候没有声明 typedef,声明结构体变量时就必须用struct 来声明,否则会报错;**示例如下:

//不使用typedef
struct _Person
{string name;int age;float height;
};
struct _Person person; //C语言中必须添加struct,C++可以不添加struct//使用typedef
typedef struct _Person
{string name;int age;float height;
}Person;
Person person;//使用typedef定义变量更加简单

C++ 中定义结构体时即便没有声明 typedef ,声明变量不添加 struct 也可以正常使用;

2.定义与平台无关的类型

typedef 来定义与平台无关的类型,例如:同一份代码需要在 Linux / Mac / windows 使用,而每个平台都有不同的差异,可以通过以下方式解决:

#ifdef __APPLE__            //MAC平台:REAL_TYPE表示 int 类型
typedef int REAL_TYPE;
#elif WIN32                 //Windows平台:REAL_TYPE表示 int 类型
typedef double REAL_TYPE;
#else                       //Linux平台:REAL_TYPE表示 bool 类型
typedef bool REAL_TYPE;
#endif

重上面代码可以看出,在不同的平台定义 REAL_TYPE 变量时,对应的数据类型都不一样,重而可以达到根据平台的差异性自定义设置的问题!

二.define 简介

C 语言中,可以用 #define 定义一个标识符来表示一个常量/函数,用 #define 定义标识符的一般形式为:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 typedef 和 define 区别
//@Time:2021/06/27 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************///定义常量
#define MAX_VALUE 100       //定义整型变量MAX_VALUE值为100
#define USER_NAME "huge"    //定义字符串变量USER_NAME值为"huge"
#define PI 3.1415926        //定义浮点数变量PI值为3.1415926
//定义简单函数
#define MAX(a,b) (a>b)?a:b  //取两个数最大值
#define MIN(a,b) (a<b)?a:b  //取两个数最小值
//定义复杂多行的函数
#define   MACRO(arg1,   arg2)   do   {   \\
stmt1;   \
stmt2;   \\
}   while(0)
关键是要在每一个换行的时候加上一个 "\ "

凡是以#开头的均为预处理指令,预处理又叫预编译。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。

使用 define 定义一个多行的复杂函数,关键是要在每一个换行的时候加上一个 \

三.typedef 和 define 区别

1.执行时间不同

关键字 typedef 在编译阶段有效,由于是在编译阶段,因此 typedef 有类型检查的功能。

[#define](https://www.codersrc.com/archives/8894.html) 则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。凡是以 # 开头的均为预处理指令,预处理又叫预编译。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。

2.功能有差异

  • typedef 用来定义类型的别名,定义与平台无关的数据类型,与 struct 的结合使用等。
  • #define 不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

3.作用域不同

#define 没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用;

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 typedef 和 define 区别
//@Time:2021/06/27 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/void func1()
{#define HW "HelloWorld";
}
void func2()
{string str = HW;cout << str << endl;
}

typedef有自己的作用域;

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 typedef 和 define 区别
//@Time:2021/06/27 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/void func1()
{typedef unsigned int UINT;
}
void func2()
{UINT uValue = 5;//error C2065: 'UINT' : undeclared identifier
}

四.猜你喜欢

  1. C 语言 数组下标越界和内存溢出区别
  2. C 语言 指针声明和定义
  3. C 语言 指针 p++ / p–
  4. C 语言 p++/§++/_(p++)/_p++
  5. C 语言 使用指针遍历数组
  6. C 语言 指针和数组区别
  7. C 语言 指针数组和数组指针区别
  8. C 语言 空指针 NULL
  9. C 语言 void 指针
  10. C 语言 野指针
  11. C 语言 函数值传递和址传递
  12. C 语言 函数缺省参数
  13. C 语言 函数不定长参数
  14. C 语言 函数指针
  15. C 语言 指针函数
  16. C 语言 回调函数 callback
  17. C 语言 typedef
  18. C 语言 define 定义常量
  19. C 语言 define 防止头文件重复包含
  20. C 语言 define 定义函数
  21. C 语言 define 定义函数(多行书写)
  22. C 语言 typedef 和 define 区别

未经允许不得转载:猿说编程 » C 语言 typedef 和 define 区别

C语言 typedef 和 define 区别 - C语言零基础入门教程相关推荐

  1. C语言 vprintf 函数和 printf 函数区别 - C语言零基础入门教程

    目录 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明 2.vprintf 函数声明 二.vprintf 函数和 printf 函数使用 三.猜你喜欢 零基础 C/C ...

  2. C语言 全局变量和局部变量区别 - C语言零基础入门教程

    目录 一.全局变量和局部变量简介 1.全局变量简介 2.局部变量简介 二.全局变量和局部变量注意事项 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语 ...

  3. C语言 NULL 和 0 区别 - C语言零基础入门教程

    目录 一.关于 NULL 定义 二.NULL 和 0 区别 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.关于 NULL 定义 NU ...

  4. C语言 ##__VA_ARGS__ - C语言零基础入门教程

    目录 一.##__VA_ARGS__原理 二.##__VA_ARGS__使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.##__ ...

  5. C语言 __VA_ARGS__ - C语言零基础入门教程

    目录 一.__VA_ARGS__简介 二.__VA_ARGS__使用 1.__VA_ARGS__宏输出字符串常量 2.__VA_ARGS__宏输出可变参数 三.__VA_ARGS__缺点 1.仅仅只支 ...

  6. C语言 ##运算符 - C语言零基础入门教程

    目录 一.##运算符简介 二.##运算符使用 1.##运算符常规使用 2.##运算符定义结构体 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础 ...

  7. C语言 __cplusplus - C语言零基础入门教程

    目录 一.__cplusplus 简介 二.__cplusplus 使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.__cplu ...

  8. C语言 #运算符 - C语言零基础入门教程

    目录 一.#运算符简介 二.#运算符使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.#运算符简介 在 C 语言关于 define ...

  9. C语言 extern “C” - C语言零基础入门教程

    目录 一.__cplusplus 简介 二.__cplusplus 使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.__cplu ...

最新文章

  1. 10个你值得收藏的牛逼开源后台控制面板
  2. node + express + mysql 搭建后台
  3. 十个用Python实现的简单算法
  4. 用hundred造句子_关于冬至的问候短句,冬至文案唯美句子
  5. Bit.com BCH期权上线以来日交易量持续翻倍
  6. android 获取uri的正确文件路径的办法
  7. Redis初识、设计思想与一些学习资源推荐
  8. 两直线夹角求解-Python编程实现
  9. python串口调试助手_python 串口调试工具源码
  10. teamviewer 服务器系统,远程支持服务器搭建teamviewer
  11. samba服务器的位置文件是,从windows通过samba服务器访问文件问题
  12. Collectors.joining()
  13. AppStore隐私政策网址(URL)
  14. Apache拯救世界之数据质量监控工具 - Apache Griffin
  15. 【疑难杂症】JavaScript执行期上下文
  16. 低配版点燃我温暖你爱心代码
  17. 3月18日云栖精选夜读 | 开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起!...
  18. 罗杰波、马毅、华刚等谈视觉研究那些事:是时候重新定义视觉了
  19. 计算机时间、unix时间、linux时间、java时间为何以1970年1月1日为原点?从1970年1月1日开始计算?
  20. 微信小程序助力社区便利店利润破百万

热门文章

  1. 自己动手写符合自己业务需求的eslint规则
  2. 深入理解C++中的RVO
  3. 领导者必备:三元简化模型,助你加速团队成长
  4. 58 集团大规模 Storm 任务平滑迁移至 Flink 的秘密
  5. Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  6. MaxCompute - ODPS重装上阵 第四弹 - CTE,VALUES,SEMIJOIN
  7. 定了!2020年,6种将死的编程语言!
  8. 腾讯云全面更新数据智能服务全景图!
  9. 一行 Python 代码能实现这么多丧心病狂的功能?(代码可复制)
  10. 权威预测:未来一年,企业云服务将会如何发展?