[elektro] C struktura kérdés

Fuzesi Arnold arnold.fuzesi.lista at gmail.com
Fri Apr 16 17:54:33 CEST 2010


Assszem ertem.

Szoval az a gondod h nem atlathato ha kulon typedef-eled a legacy-t es 
beszurogatod ide-oda.


Azt szeretned h benne typedef-eld a masodik strukturaba ott lasd is, aztan 
mashol csak a tipusra hivatkozz?

Ha nem ez a gond akkor nemertem :)

Arnold

On 2010. 04. 16. 17:41, hg12345 wrote:
> Ám legyen  :-)
> Szerintem ebből se értetek többet. 
> 
> Azért használok typedef-t mert így egyszerűbb később a kezelése.
> 
> A második typedef-be szeretném a "Legacy"  structuráját átmenteni.
> A jelenlegi kis különséget még tudom oldani, nem ez a problémám :-)
> --------------------------------------------------------------------
> typedef	struct tagITEMu{
> 			struct{													
> 					iStr_t		iString:12;						//String Index
> 					unsigned	No:4;									//kisegitő sorszám
> 					};
> 	
> 			union{
> 				struct{
> 					unsigned	Default:12;					//default érték
> 					unsigned	Ch:4;								//csatorna sorszám
> 				};
> 				struct{
> 					unsigned	ItemDelta:12;				//a menü blokk mérete....... (igy nagyobb területet tudok definiálni)
> 				};
> 			};		
> 				
> 			union{
> 				unsigned int	 Tag3rd;						//ezt nem használom sehol csak az érték adásnál....
> 				MIndex_t	ItemStart;							//következő ITEM kezdö címe...  (nincs meghatározva a kezdő hely!!!!)
> 				unsigned int	*pRam;							//Ram ban tárol érték, elvileg ezt is tudom korlátozni erre a tartományra....	
> 				struct {
> 					unsigned 		SelIndex:1;					//kulső vagy helyettesítő index 
> 					eE2index_t	E2Index:15;					//külső memória cim
> 					};
> 				unsigned short	Address;			//Második memória szó						
> 			};
> 	
> 			union{
> 				unsigned short	Legacy;						//hozzáféréssel kapcsolatos adatok		
> 				void (*pF)(struct tagITEMu *p);		//függvény pointer  ezért a legalsó bitje mindig nulla!, a pointer a változtatások miatt szükséges
> 				struct{
> 					FunctConst_t	SelFunct:1;				//0: a tárol érték egy függvény címet takar....  1: konstans megadás
> 					unsigned	:2;						//!!! Free szabadon felhasználható
> 					EditType_t		EditType:5;				//állítási tipus
> 					DecPoint_t		DecPoint:4;				//decimál point
> 					Access_t			Access:4;					//hozzáférési jog
> 					};	
> 			};					
> 		} ITEMu_t;
> 		
> 		
> typedef	struct tagITEMstatus{
> 					unsigned			Live:1;						//0: ez a csatorna nem létezik, 1 a csatorna létezik....
> 					unsigned	:2;						//!!! Free szabadon felhasználható
> 					EditType_t		EditType:5;				//állítási tipus
> 					DecPoint_t		DecPoint:4;				//decimál point
> 					Access_t			Access:4;					//hozzáférési jog
> 				}ITEMstatus_t;
> 
> 
> --------------------------------------------------------------------
> 
> 
> 
> 
> 
> 
>   
>   Szia!
> 
> Ezt nem értem (az elsőt sem). Meg tudnád magyarázni egy bővebb példával?
> Annyira leegyszerűsítetted, hogy nem érthető :o
> 
> Üdv,
> Lajos
> 
> 2010/4/16 hg12345 <hg12345 at freemail.hu>
> 
>> Ettől féltem :-(
>>
>> Mint említettem ez csak egy kiragadott példa.
>> Az eredeti helyzetben egy ROM-ban összetett konstans leírását tartalmazza a
>> strutc. Majd ez a struct igen sok helyen szerepel további struct belsejében.
>> Mire leírom a teljes kifejtést, nem férek el monitoron, pedig nem kicsi, és
>> értelmetlen lenne külön kifejteni a bitselect, mikor az többivel együtt
>> értelmes.
>>
>> Ez a kis darab máshol és más környezetben szerepel, de a végén találkozik
>> az eredeti struct-val
>>
>> Én nem akartam nevet adni a változó résznek, csak a struct-nak, hogy később
>> hivatkozni tudjak erre a struct meghatározásra. Minden meghatározást
>> szeretek egyszer definiálni, és a fordító bábáskodására bízom magamat és
>> programomat.
>>
>>  pontosan nem ertelek, de:
>>
>> typedef struct{
>>           unsigned b1:1;
>>           unsigned b2:1;
>>           };
>>
>> }AAA_T;
>>
>> typedef  union {
>>          long   V1;
>>         AAA_T tagAAA;
>>          } TEST_t;
>>
>>
>> miert nem jo?
>>
>> A.
>> On 2010. 04. 16. 15:32, hg12345 wrote:
>>> Hi!
>>>
>>> Hogyan lehet egy unnamed struct struktura nevet adni?
>>>
>>> typedef  union {
>>>          long   V1;
>>>           struct tagAAA{
>>>            unsigned b1:1;
>>>            unsigned b2:1;
>>>           };
>>>          } TEST_t;
>>>
>>>
>>> typedef struct tagAAA  AAA_t;
>>>
>>> és későbbiekben ezt a typedef-et szeretném használni. A belső
>> strukturának nem szeretnék nevet adni (unnamed).
>>> A fordító említi, hogy a tagAAA nem definiáltam ami jogos is.
>>> Ezért később nem is tud rá hivatkozni.
>>>
>>> Ha felcserélem a TYPEDEF meghatározásokat vagy csak struct névvel
>> definiálom ekkor nem tudok unnamed struct létrehozni, mert változó névre
>> szükség van!
>>> #define esetén, meg nem válik azonos típusúvá  a két struktura, ezért
>> castolás nélkül nem tőtlhetők egymásba.
>>> A fenti példa csak egy egyszerűsítés de a lényeg jól látszik belőle.
>>>
>>> Van erre megoldás?
>>>
>>> -----------------------------------------
>>>           elektro[-flame|-etc]
>>>
>> -----------------------------------------
>>          elektro[-flame|-etc]
>>
>> -----------------------------------------
>>          elektro[-flame|-etc]
>>
> -----------------------------------------
>           elektro[-flame|-etc]
> 
> -----------------------------------------
>           elektro[-flame|-etc]
> 



More information about the Elektro mailing list