會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





請問關於C語言struct的一些問題
中級會員
註冊日期:
2014/12/02 11:55
所屬群組:
註冊會員
文章: 70
等級: 7; EXP: 28
HP : 0 / 157
MP : 23 / 1139
離線
最近有個疑問,是關於struct是否有被實體化宣告

在ptt中看到以下解釋


struct ttt1
{
    
char a;
}
test1;

struct {
        
unsigned char a;
}
test2;

typedef struct{
        
unsigned char a;
}
test3;

typedef struct ttt2{
        
unsigned char a;
}
test4;

1. 宣告一個名子叫ttt1的結構然後生出一個實體test1
2. 宣告一個沒有名子的結構然後生出一個實體test2
3. 幫一個沒有名子的結構取外號叫做test3
4. 幫一個叫ttt2的結構取外號叫做test4




有幾個問題想請問大家

問題1.若在.h檔內這樣定義,test3或是test4會被實體化嗎
因為我在test4內有宣告了test3 Mytest3;

typedef struct{
unsigned char a;
}test3;

typedef struct{
unsigned char a;
test3 Mytest3;
}test4;

問題2.有三個檔案aa.c(aa.h) 和 bb.c(bb.h) 和 cc.c(cc.h)
我要在cc.c內使用aa.c和bb.c內已經宣告好的結構
但是我的bb.c內的結構宣告是已經在aa.h內定義過的結構
請問怎樣做才是正確的作法?

我目前的作法是

在aa.h內
typedef struct{
unsigned char year;
}clock;
extern clock My_Clock_a;

在aa.c內
#include "aa.h"

clock My_Clock_a;

在bb.h內
extern clock My_clock_b;

在bb.c內
#include "bb.h"
#include "aa.h"

clock My_clock_b;

在cc.c內
#include "aa.h"
#include "bb.h"

My_clock_a.year = 1;
My_clock_b.year = 1;


希望大家看的懂我想問的問題....

2015/12/11 09:43
轉換PDF檔 列印


Re: 請問關於C語言struct的一些問題
高級會員
註冊日期:
2008/11/13 13:41
所屬群組:
註冊會員
文章: 149
等級: 11; EXP: 26
HP : 0 / 256
MP : 49 / 6398
離線
引用:


問題1.若在.h檔內這樣定義,test3或是test4會被實體化嗎
因為我在test4內有宣告了test3 Mytest3;

typedef struct{
unsigned char a;
}test3;

typedef struct{
unsigned char a;
test3 Mytest3;
}test4;


不會,要有把test4拿來宣告變數才有用,不然它只是一種型態。

引用:

問題2.有三個檔案aa.c(aa.h) 和 bb.c(bb.h) 和 cc.c(cc.h)
我要在cc.c內使用aa.c和bb.c內已經宣告好的結構
但是我的bb.c內的結構宣告是已經在aa.h內定義過的結構
請問怎樣做才是正確的作法?

我目前的作法是

在aa.h內
typedef struct{
unsigned char year;
}clock;
extern clock My_Clock_a;

在aa.c內
#include "aa.h"

clock My_Clock_a;

在bb.h內
extern clock My_clock_b;

在bb.c內
#include "bb.h"
#include "aa.h"

clock My_clock_b;

在cc.c內
#include "aa.h"
#include "bb.h"

My_clock_a.year = 1;
My_clock_b.year = 1;


希望大家看的懂我想問的問題....


會認不出來
在bb.h內
extern clock My_clock_b;
要再上面先加#include "aa.h" 不然找不到宣告原型。
bb.c 的話直接#include "bb.h"即可,並請在aa.h內加上

#ifndef __AA_H
#define __AA_H
..內容
#endif

可避免重複定義問題

cc.c使用沒問題。

2015/12/11 20:24
轉換PDF檔 列印


Re: 請問關於C語言struct的一些問題
中級會員
註冊日期:
2014/12/02 11:55
所屬群組:
註冊會員
文章: 70
等級: 7; EXP: 28
HP : 0 / 157
MP : 23 / 1139
離線
dark大大,謝謝你幫我解答疑惑

另外想再請問,若是有全域變數 或者是 定義會被很多個.c檔使用到,是否會特地去開一個.h檔來專門放這些東西
例如:有aa.c(aa.h) 和 bb.c(bb.h) 和 cc.c(cc.h)三個檔案

這三個檔案內都有全域變數或是定義要被互相使用

那在這三個.c檔內
都必須要
#include "aa.h"
#include "bb.h"
#include "cc.h"

但若是 特地額外開一個global.h專門來放會被很多不同的.c檔用到的全域變數

然後這三個.c檔只需要include自己的.h檔之外,只要在include "global.h" 就好

請問這樣的作法會比較好嗎

2015/12/11 21:44
轉換PDF檔 列印


Re: 請問關於C語言struct的一些問題
高級會員
註冊日期:
2008/11/13 13:41
所屬群組:
註冊會員
文章: 149
等級: 11; EXP: 26
HP : 0 / 256
MP : 49 / 6398
離線
引用:

嗚啦啦啦 寫道:
dark大大,謝謝你幫我解答疑惑

另外想再請問,若是有全域變數 或者是 定義會被很多個.c檔使用到,是否會特地去開一個.h檔來專門放這些東西
例如:有aa.c(aa.h) 和 bb.c(bb.h) 和 cc.c(cc.h)三個檔案

這三個檔案內都有全域變數或是定義要被互相使用

那在這三個.c檔內
都必須要
#include "aa.h"
#include "bb.h"
#include "cc.h"

但若是 特地額外開一個global.h專門來放會被很多不同的.c檔用到的全域變數

然後這三個.c檔只需要include自己的.h檔之外,只要在include "global.h" 就好

請問這樣的作法會比較好嗎


系統通用全域變數用個C檔來做來統整宣告(只做變數宣告)即可,在引用此h檔會比較方便。

如果不是還是放在各自檔案裡就好,以免搞混用途。

2015/12/12 14:31
轉換PDF檔 列印


Re: 請問關於C語言struct的一些問題
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 915
等級: 26; EXP: 97
HP : 0 / 649
MP : 305 / 18928
離線
>>例如:有aa.c(aa.h) 和 bb.c(bb.h) 和 cc.c(cc.h)三個檔案
>>這三個檔案內都有全域變數或是定義要被互相使用

感覺這是架構問題或是誤用的問題....
一般而言,只有主程式(一個c會用到全域變數),包含中斷...
三個檔案都有全域變數且要互相使用,這樣的架構,
本身好像就弄錯了...

2015/12/14 21:23
_________________
程式是
依照寫出來(的code),跑出結果
不是依照你想出來的,得到結果

先有需求規格 後有解決方案
轉換PDF檔 列印


Re: 請問關於C語言struct的一些問題
中級會員
註冊日期:
2014/12/02 11:55
所屬群組:
註冊會員
文章: 70
等級: 7; EXP: 28
HP : 0 / 157
MP : 23 / 1139
離線
引用:

jason680 寫道:
>>例如:有aa.c(aa.h) 和 bb.c(bb.h) 和 cc.c(cc.h)三個檔案
>>這三個檔案內都有全域變數或是定義要被互相使用

感覺這是架構問題或是誤用的問題....
一般而言,只有主程式(一個c會用到全域變數),包含中斷...
三個檔案都有全域變數且要互相使用,這樣的架構,
本身好像就弄錯了...



小弟有的觀念不是很正確...所以才想上來請問各位
謝謝jason680的教導

沒想到我之前這樣做是很不好的....


但若只有主程式的main.c能夠去更改其他.c檔內的變數
那我若是aa.c想去更改bb.c內的x值
那就只能在bb.c內寫個副程式,讓aa.c去使用bb.c內的副程式去更改bb.c內的x值

請問是這樣嗎?

2015/12/15 12:54
轉換PDF檔 列印


Re: 請問關於C語言struct的一些問題
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 915
等級: 26; EXP: 97
HP : 0 / 649
MP : 305 / 18928
離線
應該是說...."獨立"的關係

這樣說好了....
在家媟|有客廳,廚房,浴室,卧室,...
都會有燈,你會在廚房"想"要可以控制"卧室"的燈嗎?
另外,刀具/廚具你會想要放在卧室跟浴室嗎?

如果你不會這樣做的時候,...
那你就要想想為什麼三個(c)檔案的變數要被互相使用?
你想要在浴室開廚房的燈跟拿到菜刀嗎?

或者說說你實際遇到的問題.....

2015/12/15 14:05

jason680 於 2015年12月15日 14:22:48
_________________
程式是
依照寫出來(的code),跑出結果
不是依照你想出來的,得到結果

先有需求規格 後有解決方案
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project