<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://www.gentoo-zh.org/extern.php?action=feed&amp;tid=307&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / typedef用法]]></title>
		<link>https://www.gentoo-zh.org/viewtopic.php?id=307</link>
		<description><![CDATA[typedef用法 最近发表的帖子。]]></description>
		<lastBuildDate>Fri, 26 Aug 2022 06:06:07 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[typedef用法]]></title>
			<link>https://www.gentoo-zh.org/viewtopic.php?pid=313#p313</link>
			<description><![CDATA[<p>引言</p><p>typedef 声明，简称 typedef，为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观，意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型，从而增强可移植性和以及未来的可维护性。 在编程中使用typedef目的一般有两个，一个是给变量一个易记且意义明确的新名字，另一个是简化一些比较复杂的类型声明。</p><p>typedef的使用方法如下:</p><p>typedef existing_type new_type_name ;</p><p>注意:typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。<br />typedef的最简单使用</p><p>typedef int size; typedef unsigned int WORD;</p><p>第一个声明定义了一个char的同义词，名字为C，你可以在任何需要int的上下文使用size。 第二个声明定义了一个unsigned int的同义词,名字为WORD，你可以在任何需要int的上下文使用WORD。<br />typedef和数组,指针</p><p>我们可以不用象下面这样重复定义有 81 个字符元素的数组：</p><p>char line[81];&#160; char text[81];</p><p>定义一个 typedef，每当要用到相同类型和大小的数组时，可以这样：</p><p>typedef char Line[81];&#160; Line text, secondline;</p><p>同样，可以象下面这样隐藏指针语法：</p><p>typedef char * pstr;&#160; pstr str = &quot;abc&quot;; int mystrcmp(pstr, pstr);</p><p>typedef和函数</p><p>函数指针一般用于回调，例如信号处理，libcurl等会应用到回调。回调是比较常用的技术，而回调就要涉及函数指针。 当我们的程序中有以下函数:</p><p>void printHello(int i);</p><p>然后我们要定义一个函数指针，指向printHello，并且调用这个方法，代码如下:</p><p>void (*pFunc)(int); pFunc = &amp;printHello; (*pFunc)(110);</p><p>其中void (*pFunc)(int)是声明一个函数指针，指向返回值是void，调用参数是(int)的函数，变量名是pFunc,pFunc就是函数指针了，以前是函数指针的简单用法。 大家可以看到，声明一个函数指针是比较复杂的，尤其是当你要在多处地方声明同一个类型的函数指针变量，代码更加复杂，所以有下面简化的做法:</p><p>typedef void (*PrintHelloHandle)(int);</p><p>使用代码如下:</p><p>PrintHelloHandle pFunc; pFunc = &amp;printHello; (*pFunc)(110);</p><p>以后其他地方的程序需要声明类似的函数指针，只需要下面代码:</p><p>PrintHelloHandle pFuncOther;</p><p>这样，我们的代码就变得更加简洁易懂。<br />typedef心得</p><p>大家在看typedef和数组,指针以及typedef和函数，可能会觉得typedef比较复杂，但是其实typedef 行为有点像 #define 宏，用其实际类型替代同义字。 请看看下面例子</p><p>typedef char * pstr;&#160; pstr mystr;</p><p>代码pstr mystr，展开之后就是char * mystr,把mystr，替换为语句typedef char * pstr的pstr，展开之后还是char * mystr。 typedef并不创建新的类型，typedef 在编译时被解释，因此让编译器来应付超越预处理器能力的文本替换而已。 这些规则可以应用到typedef和数组:</p><p>typedef char Line[81]; Line text;</p><p>把text替换为typedef char Line[81]的Line，展开之后就是</p><p>char text[81]; </p><p>也可以应用到最复杂的typedef和指针</p><p>typedef void (*PrintHelloHandle)(int); PrintHelloHandle pFunc;</p><p>将pFunc替换typedef void (*PrintHelloHandle)(int),展开之后就是</p><p>void (*pFunc)(int);</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Fri, 26 Aug 2022 06:06:07 +0000</pubDate>
			<guid>https://www.gentoo-zh.org/viewtopic.php?pid=313#p313</guid>
		</item>
	</channel>
</rss>
