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 問題在於它的內容比有效的內容大很多。所以讀入的時候...