什么是c的强类型?

时间:2015-06-02 05:31:40

标签: c linux strong-typing

我已经在某个地方阅读了这段代码,但我无法理解它的含义。

/** Use strong typing for ODP types */
#define odp_handle_t struct {} *  

以上代码段的重要性是什么?

2 个答案:

答案 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;