2015-12-02 80 views
0

我正在編程抽象的數據類型。這意味着我的頭文件我宣佈我的結構指針及其相關的功能,像這樣:C編程抽象 - typedef外部聲明

application.h

typedef struct APPLICATION_Context *APPLICATION_Context; 

    extern APPLICATION_Context appContextConstruct; 

    extern void appContextAddMember(int member); 

,並在源文件中:

application.c

#include "application.h" 

    struct APPLICATION_Context{ 
     int member0; 
     int member1; 
     int member2; 
    }; 

    extern APPLICATION_Context appContextConstruct; 

這個設置的兩個問題:

  1. 爲什麼在頭文件中,我不必將typedef'd結構聲明爲extern?它也應該在標題外部可見!

  2. 是否需要在源文件中重複'extern'關鍵字?

+0

使用'extern'關鍵字可以區分*聲明*和*定義*。 –

+0

我可以回答這些問題,但不清楚你用這段代碼試圖做什麼,它沒有什麼意義。你是否試圖通過不完整/不透明的類型創建私有封裝?你想創建某種「單身」對象嗎? – Lundin

+0

通過不完整類型的私有封裝 – hewi

回答

1

爲什麼在標題中,我沒有宣佈typedef定義結構爲extern?它應該也可以在標題之外看到!

typedef對任何文件都可見,包括您的標題。不要混淆typedef和變量聲明。

事實上,你根本不需要使用extern,它是一個應該避免的關鍵字,因爲這意味着你正在使用全局變量,這是一個糟糕的設計。

extern在函數原型之前是多餘的。

另外,請勿在typedefs後面隱藏指針。

+1

「另外,絕對不要在typedefs後面隱藏指針。」你能提供關於這個聲明的文檔 – hewi

+0

@hewi你可能想閱讀[this](http://stackoverflow.com/questions/750178/is-it-a-good-idea-to-type-def-pointers) –