我已經閱讀過這段代碼,但我無法理解它的含義。c中的強類型是什麼?
/** Use strong typing for ODP types */
#define odp_handle_t struct {} *
以上代碼片段的意義是什麼?
我已經閱讀過這段代碼,但我無法理解它的含義。c中的強類型是什麼?
/** Use strong typing for ODP types */
#define odp_handle_t struct {} *
以上代碼片段的意義是什麼?
此代碼片段定義了符號odp_handle_t它表示資源的不透明句柄。它是不透明的,因爲它是一個指向空結構的指針。它指向的東西不會暴露給用戶。它被稱爲句柄,因爲它不直接指向資源,它只是標識它。內部實現知道如何使用這個句柄來訪問所需的資源。這有助於保持客戶端代碼與API實現之間的獨立性。最後,強類型部分來自這樣一個事實,即它是指向類型(空結構)的指針,而不是指針。
請注意,標準C中沒有「指向空結構的指針」這樣的東西。 – Lundin
是的,您是對的。我只是假定他正在使用gcc,其中空結構以及指向它們的指針都已被很好地定義。 –
這只是一些無意義的代碼,與強類型無關。這似乎是宣告指向不完全類型的一些不規範的方式,但它是不是有效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;
你會在那裏放置什麼結構成員? –
@HadiBrais程序保留爲私有變量所需的任何內容,不會被公開,也不會提供給調用者。 – Lundin
@Ludin像什麼?我見過的所有類型的句柄都被定義爲void指針或空結構指針。 –
[一個相關問題的優秀答案](http://stackoverflow.com/a/430414/434551)可能會回答你的問題。 –