C++中typedef是啥意思啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中typedef是啥意思啊相关的知识,希望对你有一定的参考价值。

typedef struct msg

DWORD dd;
WORD ss;
double sd;
double sdf;
msg, *gg;
typedef DWORD (PASCAL *pp)(gg);
恳请详解,不胜感激!

C++中typedef为C语言的关键字,其作用是给某种数据类型定义一个新的名字。关于typedef的更多介绍如下:

1.在C语言编程中,可以使用【typedef】关键字来重新命名一个数据类型,这里指的数据类型包括基本数据类型如int ,char,double等和结构数据类型struct等。

2.使用typedef的目的主要有两个,其一是为了让自己在后续编程时方便记住变量的名字,其二是为了简化一些变量名称较长的名字。

3.常见的用法如下:

该代码中,使用Status来代替int的表达,使用DATE来代替double的表达。

扩展资料:

使用typedef关键字需要注意:

(1)用typedef只是对已经存在的类型增加一个类型名,而没有创造一个新的类型。只是增加了一个新名字,可以用该名字定义变量,比如使用上文中的Status定义变量i;则i变量的类型为int型。

(2)可以用typedef声明新类型名。但是不能用来定义变量。

参考资料来源:百度百科-typedef

参考技术A

typedef是C语言32个关键字之一,意思是重新定义一个数据类型,严格来说,是将现有的数据类型起个新的别名。

这样做的最大好处是:简化复杂类型,提高程序的可读性。

如:

典型应用1:

typedef struct msg

DWORD dd;
WORD ss;
double sd;
double sdf;
msg, *gg;     

//这里是将struct msg结构体类型重新定义为msg

//将struct msg *结构体指针类型,重新定义为gg

分步写就是:

struct msg

DWORD dd;
WORD ss;
double sd;
double sdf;
;//定义结构体struct msg类型

typedef struct msg  msg ;

typedef struct msg * gg ;

典型应用2:

重新定义一个函数指针类型

typedef int (*pp)(  gg );

该句是重新定义了一个新的数据类型 pp;接下来,可以用pp去定义形如int xxx( struct msg *)类型的函数指针变量了。如:

//定义一个函数func
int func( struct msg * pm )

XXX; //函数体
return 0;

int main()

pp pf=func ; //定义一个函数指针pf,指向func函数
gg m ; //定义一个结构体指针m
pf( m ); //通过pf引用func函数,就相当于调用 func(m);
...

参考技术B C/C++语言中,typedef 是一个用于自定义变量类型名的预定义标识符。用它定义的自定义类型名可以用到程序中。
例如:如果有语句
typedef int num;
则语句
num a = 5;
等价于语句
int a = 5;
可以用自定义的类型名取代预定义变量类型标识符。一般在主函数以外进行定义。
参考技术C 类型定义关键字,他用来定义一个类型。。。。
typedef unsigned int uint;
如果你写这一句话,就定义了一个类型,他的名字是uint 代表无符号数,之后你可以用
uint i;来定义一个无符号数。。。。
你得这句话是定义了一个结构类型,类型名就是msg;
以后你要创建一个这样的结构体只需要msg a;即可,如果没有定义,你就只能写成
struct msg a;
typedef 的用法是 typedef 要定义的类型 使用的类型名;
typdef语句使用后就定义了一个新的类型名用来代替原来的类型,之后就可以使用这个类型,
比如 typdef int i;
i j;
这就定义了一个类型名叫i; 他是int型的,第二句是声明一个i类型的变量j;
参考技术D typedef DWORD (PASCAL *pp)(gg);
typedef struct msg

DWORD dd;
WORD ss;
double sd;
double sdf;
msg, *gg;
把msg定义成结构 struct msg
gg定义成结构指针 struct msg*;
把 pp定义成 DWORD (PASCAL *)(gg); 函数指针类型

typedef定义一个用户命名的类型,
可以 用一个有意义的名字命名.

这个 typedef 涉及 LPWSTR 是啥意思?

【中文标题】这个 typedef 涉及 LPWSTR 是啥意思?【英文标题】:What does this typedef mean involving LPWSTR?这个 typedef 涉及 LPWSTR 是什么意思? 【发布时间】:2015-01-28 23:08:26 【问题描述】:

我正在尝试寻找 LPWSTR 的替代品来将项目移植到 gcc。

typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR;

什么是空终止?如果我做这样的事情会安全吗:

typedef WCHAR   *LPWSTR 

【问题讨论】:

见:***.com/questions/11648246/compiler-error-in-dev-c。接受的答案稍微谈到了这些符号。 __nullterminated 看起来像是特定于编译器的扩展。在任何情况下,LPWSTR 只是一个指向宽字符的指针(目的是该字符是字符数组中的第一个字符,以空字符结尾,从而形成一个字符串)。您的 typedef 很好(尽管它缺少分号)。 所以typedef WCHAR *LPWSTR 可以作为替代品? @Misty:是的。你的阅读速度比我忍者编辑我的评论要快 :-) 如果你在 Windows 上使用 GCC,那么在某个地方应该已经有一个标题来定义这些类型。 (例如,MinGW 有自己的 windows.h 版本。) 我正在使用 cygwin-gcc 【参考方案1】:

typedef __null 终止 WCHAR *NWPSTR, *LPWSTR, *PWSTR;

__nullterminated 部分是SAL 注释。 SAL 是 Microsoft 特定的技术,用于注释函数参数、返回值、函数行为等,以帮助使用 Visual Studio 代码分析工具查找错误并减少 C/C++ 代码缺陷。您可以在 MSDN 上阅读有关 SAL 的信息:

Using SAL Annotations to Reduce C/C++ Code Defects

WCHAR 在 Windows 平台 SDK 标头中基本上定义为 wchar_t 的 typedef,它是 Microsoft Visual C++ 中的 16 位 字符类型编译器。这用作 Unicode UTF-16 编码的“字符单元”,这是 Windows API 的默认 de facto Unicode 编码。 请注意,Linux 上的 GNU GCC 等其他编译器将 wchar_t 视为 32 位 字符单元(不是 16 位),因此您必须注意这里代码的可移植性。

(注意:现代版本的 Windows 支持 Unicode UTF-16 以及所谓的代理对,因此您可以有一对相邻的WCHARs 的定义一个代理对。)

NWPSTRLPWSTRPWSTR 都是同义词,定义为 指针 WCHAR,即同时考虑__nullterminated SAL 注释,它们是指向“raw” C 风格NUL 终止的Unicode UTF-16 字符串

基本上,这是 Windows Win32 Unicode 等价于经典 C 的char*

我用 C++ 编写 Windows 已经好几年了,老实说,我从来没有遇到过这个 NWPSTR :)

名称PWSTR 是使用以下元素构建的:

P:指针 W"wide",即WCHAR/wchar_t-based,即Unicode UTF-16 STR: 字符串

因此,PWSTR 表示指向 WCHAR/wchar_t 字符串的指针,即 Unicode UTF-16 字符串,如上所述。

LPWSTR 只是同一事物的旧名称;最初的L 表示“长”,这可以追溯到存在“长指针” 可以访问比“短”或“近”更远的内存的时代" 指针 :) 那些日子已经不复存在了。

而且,如果您在这些名称中添加 C,您将拥有只读 const 对应项的类型定义,例如:@987654347 @LPCWSTR 基本上是 const wchar_t* 以 NUL 结尾的 Unicode UTF-16 字符串。

您会发现 PCWSTR 和较旧的等效 LPCWSTR 在 Windows 头文件和 Windows API 文档中使用很多来表示 Unicode UTF-16 “输入”(即constC 风格的以 NUL 结尾的字符串

【讨论】:

以上是关于C++中typedef是啥意思啊的主要内容,如果未能解决你的问题,请参考以下文章

这个 typedef 语句是啥意思?

“typedef __u16 __bitwise __le16;”是啥意思?在Linux内核中是啥意思?

typedef enum与typedef struct分别是啥意思

这个 typedef 涉及 LPWSTR 是啥意思?

typedef是啥意思?

将函数指针分配给 constexpr 结构中的 typedef 函数的正确 C++ 方法是啥?