我已经在某个地方阅读了这段代码,但我无法理解它的含义。
/** Use strong typing for ODP types */
#define odp_handle_t struct {} *
以上代码段的重要性是什么?
答案 0 :(得分:2)
此代码段定义符号 odp_handle_t ,表示资源的不透明句柄。它是不透明的,因为它是指向空结构的指针。它指向的东西不会暴露给用户。它被称为句柄,因为它不直接指向资源,它只是识别它。内部实现知道如何使用此句柄来访问所需的资源。这有助于保持客户端代码与API实现之间的独立性。最后,强类型部分来自这样一个事实:它是一个指向类型(空结构)的指针而不是 void 指针。
答案 1 :(得分:0)
这只是一些与强类型无关的无意义代码。它似乎是一种声明指向不完整类型的非标准方式,但它不是有效的C.
#define odp_handle_t struct {} *
odp_handle_t x; // will not compile, struct has no members
我相信这是另一个毫无意义的gcc扩展。另外,隐藏在typedef后面的指针总是一个非常糟糕的主意。
没有理由不能使用纯标准C声明指向不完整/不透明类型的指针,并且可以在不隐藏typedef后面的指针的情况下这样做:
h file
typedef struct odp_handle_t odp_handle_t;
c file
struct odp_handle_t
{
// have to put struct members in here
};
来电者c档
odp_handle_t *pointer_to_incomplete_type;