c語言關於外部檔案呼叫結構體變數的問題急求

2021-12-23 05:02:16 字數 4105 閱讀 1344

1樓:匿名使用者

最終的答案我已經找到:

//file: head.h

struct test

; // 這裡不能定義任何變數,因為標頭檔案被許多檔案包含,會出現重複定義

extern struct test *right; // 申明結構體變數 right 在其它檔案中定義

//file: use.c

struct test *right; // 在這裡將 right 定義為全域性變數

//file: other.c

#include "head.h" // 只要將標頭檔案包含進去,任何檔案都可以呼叫 right;

void over()

{ printf("%c",right->j); // 直接呼叫結構體變數 right 的成員}

2樓:匿名使用者

在-1 -2檔案用extern stud 就行了

c語言標頭檔案中定義結構體的問題

3樓:匿名使用者

c語言程式設計中,為防止標頭檔案在同一編譯單元被重複引用,常引入#ifndef巨集來進行保護,如:標頭檔案my_head.h

#ifndef _my_head_h_             //如果沒有定義巨集_my_head_h_

#define _my_head_h_             //則,定義該巨集名

//以下是被保護的**區

//進行相應的全域性變數和結構體型別定義

typedef struct stu  stu ;

#endif                        //巨集判斷結束

這樣,當整個**中,多次引用這個my_head.h時,只有一次是生效的,系統編譯時,如果檢查巨集_my_head_h_ 已經定義,就不會再進入被保護的**區了。

ps: 巨集名,一般是與標頭檔案名相同,只是把字母全大寫,前後加上下劃線(_)

4樓:小西

標頭檔案由三部分內容組成:

(1)標頭檔案開頭處的版權和版本宣告。

(2)預處理塊。

(3)函式和類結構宣告等。

它的作用:

(1)通過標頭檔案來呼叫庫功能。

(2)標頭檔案能加強型別安全檢查。

用 #include 格式來引用標準庫的標頭檔案(編譯器將從標準庫目錄開始搜尋),到include子目錄下搜尋給出的檔案,並把它嵌入到當前檔案中 。

用 #include 「filename.h」 格式來引用非標準庫的標頭檔案(編譯器將從使用者的工作目錄開始搜尋),在當前目錄中進行搜尋,如果找不到,再按標準方式進行搜尋 ,這種方式適用於使用者自己建立的標頭檔案。

需要對外公開的常量放在標頭檔案中,不需要對外公開的常量放在定義檔案的頭部。為便於管理,可以把不同模組的常量集中存放在一個公共的標頭檔案中

c語言中,如何將結構體裡的資料 定義 為全域性變數,因為我在其他檔案中要用到這些變數

5樓:小鹿小梨

使用前宣告這些變數即可(使用extern關鍵字表示是外部定義過的變數)。但要注意,全域性變數只能定義一次,否則就會犯重複定義的錯誤。

/* 示例 */

file1.c

int i, j; //定義全域性變數

char c;

void fun( )

file2.c

extern int i,j; //外部變數宣告extern char c;

void func1( )

6樓:

直接把結構體定義成全域性變數就行,哪個檔案需要就extern

7樓:無名逃兵

把結構的定義寫到標頭檔案裡邊,然後再其他檔案裡#include就行了

8樓:你丶好

只要將結構體宣告放在全域性變數處

其他用法與全域性變數相同

9樓:小小鳥

把結構體定義在.**件中也就是標頭檔案中

10樓:匿名使用者

//main.c

#include

#include

#include "extern.h"

int print(char *str,test t);

test t=;

int main()

//extern.h

#ifndef extern_h_included#define extern_h_includedtypedef structtest;

extern test t;

extern int print(char *str,test t);

#endif // extern_h_included//extern.c

#include "extern.h"

#include

//struct stu std1;

//extern float inta;

int print(char *str,test t)

11樓:匿名使用者

你定義一個全域性的結構體變數噻

12樓:己飢己溺

fortware 

碼齡8年

關注該死的結構體,折騰了哥快兩小時!!!在此總結一下。

假設a.**件定義結構體:

struct test

;那麼要在b.c檔案中呼叫該怎麼寫呢?

需要兩步:

1、標頭檔案包含

#include "a.h"

2、先定義一個結構體變數(注意是定義,不是宣告)struct test c;

2、在b.c檔案中宣告要呼叫的結構體變數(注意是宣告,宣告為全域性變數)

extern struct test c;

3、然後就可以給結構體成員賦值

/*成員賦值*/

c.a = 1;

c.b = 2;

當然,如果變數定義為結構體指標變數,則變成如下:

/*定義*/

struct test *c;

/*宣告*/

extern struct test *c;

/*成員賦值*/

c->a = 1;

c->b = 2;

另外還有另一個變種,使用typedef 定義結構體typedef struct test

result;

/*定義*/

result c;

/*宣告*/

extern result c;

/*成員賦值*/

c.a = 1;

c.b = 2;

result是一個結構體型別,不是結構體變數,定義變數like this :result y0,y1;y0、y1才屬於結構體變數。實際上 result = struct test全文

c語言一個結構體如何在多個原始檔裡面呼叫?

13樓:

foo.**件裡面寫

#ifndef _foo_h_

#define _foo_h_

struct foo

;#endif

然後每一個需要這個結構體的檔案都加標頭檔案 foo.h

14樓:

標頭檔案裡用extern struct ***; 其中一個.c檔案裡 struct ***;

其他.c要用的話吧這個標頭檔案包含進去。

15樓:匿名使用者

引用結構體有引用型別,和引用全域性變數兩種方式。

1、引用型別。

需要將結構體定義與標頭檔案中(.**件),然後在需要引用型別的原始檔(.c)中,均引用該標頭檔案,即可使用該型別。

2、引用全域性變數。

要引用全域性變數,需要先引用型別,之後在一個原始檔中定義全域性變數,在其它原始檔中宣告該全域性變數,即可使用。

比如結構體為struct test, 定義全域性變數為struct test glabol_test;

在其它檔案中,只需要

extern struct test globol_test;

即可在對應檔案宣告所在行之下進行呼叫。

c語言結構體別名定義問題,C語言結構體別名定義問題

typedef struct stu linklist 此處第一了一個型的型別,即struct stu 即指向結構體stu的指標 所以head的型別也就是struct stu head為一個指向stu結構體型別的指標。但是並沒有未其分配具體的空間。可以將一個已定義為stu結構體的指標賦給它。c語言給...

c語言結構體程式設計題,求大神,C語言結構體程式設計題,求大神!

根據題意 一 教師資訊定義為結構體,其成員年月也為結構體 可直接定義成兩個成員變數,本題沒有強制要求 婚姻狀態採用共用體型別。二 輸入資訊直接寫在main函式,實際軟體開發應單獨寫輸入函式,輸入驗證我只寫了性別和婚姻狀態的驗證,其餘成員的輸入驗證需要自己新增。實際開發,驗證也應單獨寫函式呼叫 三 輸...

C語言檔案操作中輸出結構體亂碼的問題

你的out.txt的內容是你自己打進去的,不是用fwrite寫進去的,而且你結構中還包含了,什麼的,如果你的內容是用fwrite寫進去的就可以用fread讀了,它們是要配合使用的。別取巧啦。struct student type stud size 問題在於它的內容比有效的內容大很多。所以讀入的時候...