`

typedef 的几个用法

 
阅读更多
我们写程序时,为了增加中间层或者简写结构体等原因,会用到typedef来重定义一个变量类型。
比如:
1. 有一个变量,我们不确定使用short是否能够满足取值范围,那么我们可以typedef short daytype;我们在程序中使用daytype这种类型,当某一天发现有溢出问题时,可以修改为int或long。
2. 我们进场定义结构体:
typdef struct {
    int id;
    char info[256];
} Stru_Info;
3. 我们可能定义函数类型:
typedef char * (*void_func)();
typedef int (*int_func)(char *file_name, int level);

上述三种情况唯一费解的是函数的typedef,这里我们注意我们是定义了一个类型的函数为一个指针变量,而不是在申明函数,或者定义函数。比如void_func,他代表一个没有参数返回值为char *的函数类型的指针变量。
我们常将这个指针变量用于指向获取到的函数地址。这常用到函数dlsym:
void *open_lib = dlopen("./funclib.so", RTLD_LAZY);
void_func get_word = (void_func) dlsym(open_lib, "get_word");
注意这里缺少错误检查,使用时要加上。
分享到:
评论

相关推荐

    C/C++中的结构体声明: struct 和 typedef struct 用法

    如果你想声明几个Person的变量的话有两种方式: // 1. 在声明之后立刻创建 struct Person { int age; string name; } person_a, person_b; // 这里 person_a 都是实际的 variables 啦! // 2. 随后需要的时候再

    c++基础教程,简洁扼要

    其中 class_name 是类的名称 (用户自定义的类型) ,而可选项object_name 是一个或几个对象(object)标识。Class的声明体中包含 成员members,成员可以是数据或函数定义,同时也可以包括允许范围标志 permission ...

    RS-232-C端口实时监控软件的设计实现

    而且由于场合不同、用途、功能的不同对串口也采取不同的配置方式,为了使本程序更灵活,适应面更广,采取将所有的可能参数都预先设置在几个组合框中,可以在程序运行后随时更改设置。自定义一个设置串口参数的数据...

    C++初学者指南(原版)

    此模块将向您介绍 C++,包括其历史、设计理念以及几个最重要的功能。此模块简要概述几个 C++ 功能,包括 C++ 程序的一般形式、一些基本控制语句和运算符。它不会介绍太多细节,而会重点介绍对所有 C++ 程序都通用的...

    定长字符串模板类

    写函数参数类型的时候可以少写几个字, ^=^ 4. template <;size_t MaxSize, typename Traits=std::char_traits<;char>; >; class small_string;; // : public basic_small_string<;char, ...

    排序实验报告.doc

    退出系统 (二)程序模块结构 由课题要求可将程序划分为以下几个模块(即实现程序功能所需的函数): 主控菜单项选择函数menu() 创建排序表函数 InitList_Sq() 对顺序表L进行直接插入排序函数Insertsort() 希尔排序...

    c语言入门教程.txt

    下面列出ANSI标准定义的32个C语言的关键字,这些关键字在以后的学习中基本上都会用到,到时再说它们的各自用法。 auto break case char const continue default do double else enum extern float for goto if int ...

    《你必须知道的495个C语言问题》

    《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    VC学习大纲 VC学习讲义

    等常用对话框控件的多种使用方法。如何限制用户在不满足设定的条件时切换到其他属性页和向导页。 第十一课: 如何修改MFC AppWizard向导生成的框架程序的外观,包括修改标题栏的多种方式及原理,修改图标、光标、...

    NTLM PPROXY client的实现(C source code)

    最近又收到网友的来信,说少了几个util文件。这个是不在ntlm的算法中,而是在验证例子test_httppc_connect.cpp中使用。查了一下,我确实没有放到网上。汗啊,因为验证例子是从某个程序中抽取出来,里面包含一个很...

    iOS App中调用iPhone各种感应器的方法总结

    CoreMotion框架的使用 CoreMotion框架十分强大,它不仅将加速度传感器和螺旋仪...几个主要的类如下: CMAccelerommterData:设备的加速度数据 typedef struct {  double x;  double y;  double z; } CMAcceleration

    一些C面试题,希望能对大家有帮助

    这样实现的队列入队和出队的平摊复杂度都还是O(1), 比上面的几种方法要好。3.在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么? 函数名: atol 功能: 把字符串转换成长整型数 用法: ...

    驱动程序设计基础专题-filedisk源码分析

    定义几个IoCtrl合并宏,并定义几个结构体:MRB结构体、分区参数表等。 NTSTATUS DriverEntry()从入口点出发,嘿嘿。 具体部分已经详细在源代码注释了。 typedef struct _DEVICE_EXTENSION { BOOLEAN media_in_...

    c++中冒号(:)和双冒号(::)的使用说明

    (1)表示机构内位域的定义(即该变量占几个bit空间) 代码如下:typedef struct _XXX{ unsigned char a:4; unsigned char c;} ; XXX(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更...

    STM32调试报告.docx

    这里我们可以记住几 个常用的配置,比如 0X0 表示模拟输入模式(ADC 用)、0X3 表示推挽输出模式(做输出口用, 50M 速率)、0X8 表示上/下拉输入模式(做输入口用)、0XB 表示复用输出(使用 IO 口的第二 功能,50M...

    windows钩子编程大全

    几个结构定义如下: IMAGE_IMPORT_DESCRIPTOR struct union{ DWORD Characteristics; ;00h DWORD OriginalFirstThunk; }; TimeDateStamp DWORD ;04h ForwarderChain DWORD ;08h Name DWORD ;0Ch FirstThunk DWORD ...

    windows编程资料大全

    这里有几个地方需要注意的: 1、远程线程在宿主进程中申请空间时,空间大小的确定了是我一直无法解决的问题。我曾使用两个贴近一起的线程,以线程间的距离大小,并加上参数大小,作为申请空间时,仍然会出现非法操作...

Global site tag (gtag.js) - Google Analytics