C 中的typedef语法简介 c typedef 函数指针
typedef int INT;
上面的一行代码就表示INT也能代表int,这条定义可以在Windows头文件中找到。有什么意义呢?这是一种跨平台编译的考虑,看一下另一个Windows头文件中的例子:
#ifndef UNICODE typedef char TCHAR; #else typede wchar_t TCHAR; #endif
如果当前环境支持Unicode,那么TCHAR就会等价于wchar_t宽字符类型,否则TCHAR等价于char类型,那么程序员就可以借助TCHAR来隐藏具体的编译环境。
此外,typedef还可以增强语义,在Windows中所有的句柄本质都是void*类型,而为了增强语义,产生了HWND、HMENU、HBRUSH等不同的类型,让程序可读性增强。
大多数情况下,typedef是可以用#define来进行替换的,例如:
#define INT int
不过问题在于,#define只是进行了简单的字符替换,在编译前就被预编译器处理了,而typedef的处理则是编译器行为,因此使用typedef,编译器将能够视INT为一个类型,而不是其他东西。下面还有一个用#define容易引起混淆的例子。
#define pINT int*;typedef int *pINT2;pINT a, b;pINT2 c, d;
一般而言,我们通过类型定义,是希望将pINT定义成一种类型,那么用这种类型进行定义得到的变量,都应该是这种类型。而如果使用#define,那么看起来我们用pINT定义了a和b,实际上只有a是int*,而b只是int。使用typedef很好地避免了这个问题,c和d都是int*类型,这样不至于产生混乱的语义。
另外,因为typedef不是预编译指令,而被当作语句执行,因此也是有作用域的,typedef的作用域和一般变量相同。冲突的定义会进行覆盖,较晚执行的typedef会覆盖较早执行的typedef。
最后,typedef还可以用来定义类、结构体、联合体、数组,甚至是函数类型,下面有一个比较全面的代码例子,可以参考注释理解其中的含义:
#include <iostream>using namespace std;typedef int* _int, _int2; //_int是int*类型,而_int2是int类型typedef int INT; //INT是int类型typedef _int *INT2, *INT3; //INT2和INT3都是*_int类型,也就是**int类型typedef void (*funcptr)(double); //funcptr是一个函数指针类型,指向返回值为void,接受一个double类型参数的函数typedef union {char c;int i;bool b;} Foo; //Foo是一个联合体typedef class TestClass {int a, b, c;public:TestClass(int a, int b, int c) : a(a), b(b), c(c) {}} TESTCLASS; //TESTCLASS就是TestClass类void hello(double x) { //funcptr可以指向这个函数cout << x << endl;}int main() {INT a = 6;_int2 e = 7;_int c = &a;INT2 b = &c;INT3 d = &c;cout << a << e << *c << **b << **d << endl;funcptr p = hello;p(3.333);cout << p << endl;Foo foo;foo.i = 65;cout << foo.b << foo.c << foo.i << endl;TESTCLASS tc(1, 2, 3);system("pause");return 0;}
更多阅读
如何使用win7中的画图功能 画图功能怎么使用
如何使用win7中的画图功能——简介多人甚至已经遗忘了Win7画图程序在哪里,不妨再多啰嗦几句。相比于XP等老系统,Win7的画图工具还是改进了不少,比如类菜单似于Office的Ribbon风格界面。很显然,画图程序的主要功能就是图片处理,一些简单的
如何忽略word文档中的全部语法错误 word 语法 全部忽略
用户可以借助Word2010中的“拼写和语法”功能检查Word2010文档中存在的单词拼写错误或语法错误,并且可以根据实际需要设置“拼写和语法”选项,使拼写和语法检查功能更适合自己的使用需要。在Word2010中设置“拼写和语法”选项的步骤如
面试中的礼仪 精 礼仪队面试问题
面试中的礼仪 精——简介对于即将走上工作岗位的朋友来说,面试是不可或缺的一道必过门槛。有时候在拥有同等学历条件的前提下,能否在面试中脱颖而出就成为了是否成为受聘者的决定条件。因此,面试中的出色表现是非常重要的,而面试中的礼
如何删除双系统中的一个系统 双系统有一个无法显示
如何删除双系统中的一个系统——简介很多时候我们都会安装双系统,一个工作一个学习,因为有时候系统安装的软件过多导致开机、运行等变得很慢,所以在我们不实用这些软件的时候就可以登录另一个系统,这样既节约了时间,又能体验不同的系统带
梦中的婚礼钢琴曲简谱,c调板 c调钢琴曲简谱
梦中的婚礼钢琴曲简谱c调板。希望能和喜欢的亲们分享~~呵呵~~