junior C codering vraag?

M

mImoto

Guest
Hallo,

Ik gebruik structs in mijn code.Ik weet niet wat beter is of een meer Standaar stijl over het gebruik van functies met structs.In mijn geval heb ik pas van de waarde van een functie een aantal bytes van een struct, niet de hele struct.Heeft u senioren passeren waarde of door verwijzing struct om functies als u niet hoeft te veel bytes pass?

dwz

PORTS_PINS_Write_Port (MessageRx.BYTES.BYTE_4,
MessageRx.BYTES.BYTE_2);

thanks a lot and regards,

mimoto

 
Het is efficiënter om een pointer door te geven aan de structuur.

 
Laat een pointer naar de structuur en maken gebruik van alle structuur element je wilt.typedef struct
(
/ * De gegevens bepalen hier * /
StructMessageRx);int PORTS_PINS_Write_Port (structMessageRx * MessageRx)
(
x = MessageRx-> BYTES.BYTE_4;
return 0;
)

 
Hoi,

Met behulp van passage door verwijzing kunt u alle structuur te geven aan de functie in een keer.

Meer over het laat u in staat om een integer waarde terug aan het einde van de functie om te weten of het eindigde gewoonlijk en hebben bijgewerkt velden van de structuur en gebruik ze in andere functies.

Toto2001

 
Bedankt voor de hulp, weet ik niet post dit "dankzij boodschap" voor de punten alleen dank de snelle antwoorden op mijn vraag.Morgen zal ik mijn code.

Met vriendelijke groet,

mimoto

 
Hello again,

Nog een vraag.Wat moet ik doen ook langs de struct door te verwijzen naar een andere functie binnen de functie die ik heb doorgegeven door verwijzing.Ik bedoel, ik wil graag slagen voor een struct door verwijzing naar een functie en vervolgens binnen deze functie pas weer de struct door verwijzing naar een andere functie.Hoe denkt u senioren dit doen?zoiets als hieronder?

typedef struct
(
/ * De gegevens bepalen hier * /
StructMessageRx);int PORTS_PINS_Write_Port (structMessageRx * MessageRx)
(
x = MessageRx-> BYTES.BYTE_4;
New_Function (MessageRx)

return 0;
)

New_Function (structMessageRx * MessageRx)
(
...
return 0;
)Bij voorbaat dank en vriendelijke groet,

mimoto

 
Ja, dat is de manier om het te doen.Uw code lijkt te corrigeren.

Tom

 
Hoi,
je hebt gelijk.Dat is de manier om het te doen.

Succes
HMaier

 
Laatste vraag die ik beloof het.Als ik gebruiken in plaats van struct unionsż?.

------------------------------
typedef union BERICHT
(
unsigned char Data [8];

struct
(
BYTE BYTE_0;
BYTE BYTE_1;
BYTE BYTE_2;
BYTE BYTE_3;
BYTE BYTE_4;
BYTE BYTE_5;
BYTE BYTE_6;
BYTE BYTE_7;
) Bytes;

RX_MESSAGE);----------------------------------------

main (

RX_MESSAGE MessageRx1;

PORT_PINS_Write_Port (& MessageRx1)
...
)

-------------------------------------------------- ---------------
int PORT_PINS_Write_Port (RX_MESSAGE * MessageRx)
(

x = MessageRx-> BYTES.BYTE_4;
y = NewFunction (MessageRx);
if (y | = 0)
(
return 1; //(*) vraag hieronder
)
else return 0;
)

New_Function (RX_MESSAGE * MessageRx)
(
...
return 0;
)

Is dit ook de juiste manier voor de vakbonden?
(*) Hoe deskundigen gebruik maken van de terugkeer waarden?op deze manier?

Alvast bedankt voor uw tijd,

Met vriendelijke groet,

mimoto

 
1.typedef definieert nieuwe gebruiker soort gegevens.Dat structuren, vakbonden, enz. omvat ...

Passing pointer naar een type object in een aantal functie-aanroep is OK, wat dat voorwerp zo lang kan als het goed is gedefinieerd.

2.
/ * 1e weg * /
Als (y! = 0)
(
return 1;
)
anders
(
return 0;
)

/ * 2e weg * /

return (y? 1: 0);

Tom

 
Dat klopt met vakbonden en structuren.
Pointers hebben altijd dezelfde grootte (32 bits in Windows of minder in embedded), dus als deze pointer wijst naar een char je stuurt 4 bytes in plaats van 1, maar als het wijst op een grote structuur zal worden 4 bytes lang en .

 
wanneer u een groot aantal functies die u moet passeren dezelfde referentie.Maakt u gebruik van dezelfde naam in de argumenten van de functie of anders?

1e optie
Int PORT_PINS_Write_Port (RX_MESSAGE * MessageRx)
New_Function (RX_MESSAGE * MessageRx)
New_Function2 (RX_MESSAGE * MessageRx)

2e optie:
Int PORT_PINS_Write_Port (RX_MESSAGE * MessageRx1)
New_Function (RX_MESSAGE * MessageRx2)
New_Function2 (RX_MESSAGE * MessageRx3)

Alvast bedankt voor uw tijd,

mimoto

 
Het een vraag over codering stijl, niet C taal.Ik gebruik dezelfde naam in de naam functionas.Meer over codering stijl is te vinden op het internet.

Tom

 

Welcome to EDABoard.com

Sponsor

Back
Top