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

目录

  • 一.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 区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边缘计算精华问答 | 为什么需要边缘计算?

戳蓝字“CSDN云计算”关注我们哦&#xff01;云计算就像是天上的云&#xff0c;看得见摸不着&#xff0c;像章鱼的大脑&#xff0c;边缘计算就类似于八爪鱼的那些小爪子&#xff0c;一个爪子就是一个小型的机房&#xff0c;靠近具体的实物。那么&#xff0c;云计算的下一个爆点…

jq之事件

1.点击事件 $("p").click(); 2.dblclick()双击事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jqu…

C语言 #pragma once - C语言零基础入门教程

目录 一.#pragmaonce 宏简介二.#pragmaonce 与 #ifndef 使用 1.#ifndef2.#pragmaonce 三.#pragmaonce 与 #ifndef 区别 1.#ifndef2.#pragma once 四.#pragmaonce 与 #ifndef 联系五.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.#pragmaonce …

jq之省市区级联插件

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>省市区</title><link rel"stylesheet" href"https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css&qu…

8 年后重登王座,Python 再度成为 TIOBE 年度编程语言

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章来自&#xff1a;开源中国社区全球知名的编程语言流行度排行榜网站 TIOBE 于近日宣布&#xff1a;Python 成为 2018 年度编程语言&#xff0c;理由如下&#xff1a;2018 年&#xff0c;Python 语言上升了 3.62&#xff05; &…

C语言 #include <> 与 #include “” 区别 - C语言零基础入门教程

目录 一.什么是头文件二.#include <>三.#include “”四.#include <> 与 #include “” 区别五.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 在 C 语言或者 C 中&#xff0c;包含头文件的是会使用 #include , 可能有小伙伴会问 头文…

jq之方法链接

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

要闻君说:Intel要“起底”新任CEO了?微软停止支持Win 7?OPPO加入WPC无线充电联盟,15W无线闪充技术呼之欲出!...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 嗨&#xff0c;大家好&#xff01;偶是要闻君。咱们还是闲话少叙&#xff0c;边听边看近日有啥大新闻鸭&#xff01;文/要闻君图片来源网络空缺半年多&#xff0c;Intel或在10天内任…

C语言 const 修饰变量 - C语言零基础入门教程

目录 一.const 简介二.const 实战 1.使用 const 修饰变量必须初始化2.使用 const 修饰变量不初始化3.修改 const 修饰变量的值 三.重点提示四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.const 简介 const 是 constant 的缩写&#xff0c;…

Ubuntu上安装Hadoop集群

戳蓝字“CSDN云计算”关注我们哦&#xff01;前面我们介绍了在Ubuntu上安装Hadoop单机版。但是我们知道&#xff0c;Hadoop在实际工作中都是以集群的形式存在的&#xff0c;毕竟需要处理大量的数据&#xff0c;单机的处理速度显然不能满足。所以这篇文章我们就来介绍一下如何在…

jq之无callback,有 alert hide

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 const 修饰指针 - C语言零基础入门教程

目录 一.const 简介二.const 修饰指针 1.const int *p2.int const *p3.int * const p4.const int * const p 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.const 简介 const 是 constant 的缩写&#xff0c;意思是“恒定不变的”&#xf…

Gartner的预言:通向混合IT之旅

戳蓝字“CSDN云计算”关注我们哦&#xff01;“企业上云之旅是一个非常复杂的旅程&#xff0c;因为它不仅仅只是对基础设施的升级&#xff0c;还是对应用的整个生命周期管理的升级和业务交付模式的升级。”Gartner高级研究总监季新苏在近日举行的媒体见面会上表示。“这个旅程不…

jq之slideDown() stop()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 const 修饰函数返回值 - C语言零基础入门教程

目录 一.const 简介 1.const 修饰变量2.const 修饰指针 二.const 修饰在函数名前面三.const 修饰在函数名后面四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.const 简介 const 是 constant 的缩写&#xff0c;“恒定不变”的意思。被 cons…

OpenStack精华问答 | OpenStack是操作系统?

戳蓝字“CSDN云计算”关注我们哦&#xff01;关于OpenStack的探讨几乎从未间断&#xff0c;从2010年10月份一个版本正式发布至今&#xff0c;OpenStack在8年发展历程中&#xff0c;成为了最有争议的那一个。今天&#xff0c;我们就来看看有关于OpenStack的精华问答吧1Q&#xf…

jq之callback

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…

C语言 const 修饰函数参数 - C语言零基础入门教程

目录 一.const 简介 1.const 修饰变量2.const 修饰指针3.const 修饰在函数名前面4.const 修饰在函数名后面 二.const 修饰函数参数 1.值传递2.址传递3.const 修饰函数参数 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.const 简介 const …

有问有答 | 精华问题汇总

出品 | CSDN云计算 有问有答&#xff0c;一问一答的形式&#xff0c;帮助大家快速解决更多专业难题。 边缘计算精华问答 | 边缘计算有哪些应用场景&#xff1f; 物联网对物联网技术的快速发展和云服务的推动使得云计算模型已经不能很好的解决现在的问题&#xff0c;于是&…

jq之animate() left font

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jq之demo</title><!--线上jq库--><script src"https://code.jquery.com/jquery-3.4.1.min.js"></script><scrip…