我有一個非常簡單的問題。如果我有這樣的源代碼檔案:
#include<stdio.h>
#include"example.h"
struct mystructure{
//Data Variables
int a;
};
int main(){
mystructure somename;
somename.a = 1;
printf("%d\n", somename.a);
return 0;
}
使用這樣的頭檔案:
#ifndef EXAMPLE_HEADER_H
#define EXAMPLE_HEADER_H
// Opaque declaration.
struct mystructure;
typedef struct mystructure mystructure;
#endif
代碼將編譯良好。我也可以在頭檔案中定義結構,它會編譯得很好。
但是,如果我在不同的源代碼檔案中定義結構并嘗試使用主源代碼檔案編譯它,它將不斷拋出有關前向宣告的錯誤。
有沒有辦法在源代碼檔案中定義一個結構,在頭檔案中給它一個 typedef 并在其他源檔案的其他地方使用它?
我已經通過在頭檔案中定義結構來做到這一點,但我想知道如何以更不透明的方式做到這一點。
uj5u.com熱心網友回復:
執行此宣告和宣告
mystructure somename;
somename.a = 1;
編譯器需要知道結構的完整定義struct mystructure。例如,它需要知道要為物件分配多少記憶體somename以及該結構是否具有資料成員a。
因此,結構的定義必須在包含這些宣告和陳述句的 main 模塊中可見。
要隱藏結構定義,您可以宣告該型別的指標struct mystructure *并呼叫函式來初始化該指標和指向物件的資料成員。相應的函式必須知道結構定義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/400292.html
上一篇:嘗試使用strtok時記憶體損壞
