2015-06-02 63 views
-1

我已經閱讀過這段代碼,但我無法理解它的含義。c中的強類型是什麼?

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

以上代碼片段的意義是什麼?

+1

[一個相關問題的優秀答案](http://stackoverflow.com/a/430414/434551)可能會回答你的問題。 –

回答

2

此代碼片段定義了符號odp_handle_t它表示資源的不透明句柄。它是不透明的,因爲它是一個指向空結構的指針。它指向的東西不會暴露給用戶。它被稱爲句柄,因爲它不直接指向資源,它只是標識它。內部實現知道如何使用這個句柄來訪問所需的資源。這有助於保持客戶端代碼與API實現之間的獨立性。最後,強類型部分來自這樣一個事實,即它是指向類型(空結構)的指針,而不是指針。

+0

請注意,標準C中沒有「指向空結構的指針」這樣的東西。 – Lundin

+1

是的,您是對的。我只是假定他正在使用gcc,其中空結構以及指向它們的指針都已被很好地定義。 –

0

這只是一些無意義的代碼,與強類型無關。這似乎是宣告指向不完全類型的一些不規範的方式,但它是不是有效C.

#define odp_handle_t struct {} * 

odp_handle_t x; // will not compile, struct has no members 

我相信這又是一個毫無意義的gcc擴展。另外,隱藏typedefs背後的指針總是一個非常糟糕的主意。

沒有理由爲什麼你不能指針聲明不完全/不透明型純標準C,你可以不隱藏指針的typedef背後這樣做:

.h文件

typedef struct odp_handle_t odp_handle_t; 

C文件

struct odp_handle_t 
{ 
    // have to put struct members in here 
}; 

呼叫者C文件

odp_handle_t *pointer_to_incomplete_type; 
+0

你會在那裏放置什麼結構成員? –

+0

@HadiBrais程序保留爲私有變量所需的任何內容,不會被公開,也不會提供給調用者。 – Lundin

+0

@Ludin像什麼?我見過的所有類型的句柄都被定義爲void指針或空結構指針。 –