C語言結構體變量私有化


操作系統 : CentOS7.3.1611_x64

gcc版本 :4.8.5

問題描述

C語言結構體定義中的變量默認是公有(Public)屬性,如果實現成員變量的私有(Private)化?

解決方案

將結構體的定義放入源碼件中實現,頭文件只放聲明。

比如有如下結構體(obj.h文件中定義):

struct Obj {
    int id;
    char *name;
};
typedef struct Obj Obj;

並定義如下變量:

Obj *o;

正常情況下,可以通過如下代碼正常訪問結構體中的變量:

printf("id : %d\n",o->id);

如果將結構體的定義放入源文件中,上述代碼將會報如下錯誤:

error: dereferencing pointer to incomplete type
   printf("id : %d\n",o->id);

如需外部訪問,可通過添加相關接口實現,比如:

int get_obj_id(const Obj* o)
{
    int ret = 0;
    if(o)
    {
        ret = o.id;
    }
    return ret;
}

完整示例代碼如下:

https://github.com/mike-zhang/cppExamples/tree/master/dataTypeOpt/CStructPrivateTest1

好,就這些了,希望對你有幫助。

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2018/20180628_C語言結構體變量私有化.rst

歡迎補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM