我们写程序时,为了增加中间层或者简写结构体等原因,会用到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");
注意这里缺少错误检查,使用时要加上。
分享到:
相关推荐
本文将深入探讨typedef在C语言中的使用方法以及它的常见问题和解决方案。 首先,typedef定义新类型的最简单用法如下: ```c typedef long byte_4; ``` 这条语句的作用是将long类型定义为byte_4,使得在之后的代码...
尽管`typedef`非常有用,但在使用时也需要注意以下几点: ##### 1. 指针类型与const修饰符 当为指针类型定义`typedef`时,需要注意const的位置。 **错误示例:** ```c typedef char * const pstr; // 错误:定义...
### C++中的`typedef`用法详解 #### 一、`typedef`简介 在C++编程语言中,`typedef`是一种非常实用的功能,它允许程序员为现有的数据类型定义新的名称,这种特性对于提高代码的可读性和维护性非常重要。通过使用`...
在本文中,我们将深入探讨 `typedef` 的用法,并通过几个复杂的例子来理解其功能。 首先,我们需要理解 C 语言中的函数声明和数组声明。函数声明例如 `int fun(int, double)`,对应的函数指针声明是 `int (*pf)(int...
如果你想声明几个Person的变量的话有两种方式: // 1. 在声明之后立刻创建 struct Person { int age; string name; } person_a, person_b; // 这里 person_a 都是实际的 variables 啦! // 2. 随后需要的时候再
C语言中常用的几个关键字 在C语言中,有一些关键字经常被使用,它们可以改变变量、函数和指针的行为。今天我们将探讨四个常用的关键字:static、const、volatile和typedef。 static static关键字有多种用法,下面...
【集合的几个运算】 在计算机科学中,集合是一种抽象数据类型,它包含唯一对象的无序集合。在本文中,我们将深入探讨如何使用C语言实现集合的并、交和差运算,这些运算对于理解集合的基本操作至关重要。 首先,...
以下便是几个在C语言教学中值得注意的关键问题: 首先,类型转换是C语言中的一个重要概念。在教学时,教师需要让学生了解各种数据类型,并强调在使用数据时类型应当保持一致性。然而,在实际编程中,类型转换是一个...
接下来将对代码中的几个关键部分进行详细解析。 ### 霍夫曼树节点结构 首先,代码中定义了一个`HTNode`结构体类型,用于表示霍夫曼树的节点: ```cpp typedef struct { unsigned int weight; unsigned int ...
events 可以是以下几个宏的集合: * EPOLLIN //表示对应的文件描述符可以读(包括对端 SOCKET 正常关闭); * EPOLLOUT //表示对应的文件描述符可以写; * EPOLLPRI //表示对应的文件描述符有紧急的数据可读(这里...
define命令有以下几个特点: * 只是简单的文本替换,不会进行计算或求值。 * 宏名如果以字符串的形式被调用,则不做替换。 * 可以嵌套进行定义。 * 作用域为宏定义开始,到源程序结束,终止定义域可用`#undef`命令...
### 多媒体MCI命令消息接口的使用方法详解 #### 一、MCI命令消息接口概述 MCI(Media Control Interface,多媒体控制接口)是一种Windows操作系统提供的标准接口,用于控制多媒体设备,如音频、视频播放器等。MCI...
为了更好地理解这一用法,我们可以进一步探讨几个关键的概念和知识点: 1. 联合体的基础知识:联合体(Union)是一种数据类型,在一个“联合体”中可以定义多个成员,但是在一个时刻只能有一个成员拥有值。联合体的...
在实践中,通过几个小例子展示了CReferenced和CRefPtr的基本使用方法,包括普通构造和析构的情况、调用Ref()和Unref()的方法、以及一些可能出错或异常的使用情况。例如,在例子3中,如果在对象的引用计数不为零时...
然而,`#define`的不当使用可能会引入一系列的问题和陷阱,本文将深入探讨这些陷阱及其解决方法。 #### 宏定义陷阱 ##### 1. 括号的重要性 当定义一个宏时,如果不正确地使用括号,可能会导致意想不到的结果。...
使用TCHAR类型可以带来以下几个优点: * 可以在ANSI和Unicode编译模式下使用同一份代码,不需要手动选择char或wchar_t类型。 * 可以自动选择合适的字符串处理函数,避免了手动选择ANSI或Unicode字符串函数的麻烦。 ...
`binarySearch`方法实现了二分查找算法,用于在一个有序数组中查找特定元素的位置。该算法通过将目标值与数组中间元素进行比较,根据比较结果决定在数组的左半部分还是右半部分继续查找,从而缩小搜索范围,直至找到...
本手册针对固件库版本1.1.0,将详细介绍各个模块的功能与使用方法。 #### 二、目录概览 固件库包含多个模块,每个模块针对STM8S系列中的特定硬件资源提供接口和配置方法。以下是主要模块的概述: 1. **ADC1 (模数...
在使用typedef来定义一个新的结构体类型时,需要注意在结构体内部使用该类型来定义一个指向本身的指针,例如: typedef struct { int length; int width; BOX *box1; } BOX; 这种方式会导致编译错误,因为类型名在...