vgrajenih C junior dvomi?

M

mImoto

Guest
Zdravo,

Imam dva dvomi in ne vem, kje najti odgovor.

Prva:

Rad bi, da če pcfg_temp je drugačna od 0b00000111 ali drugačni od 0b00001110 ali drugačni od 0b00000100 ali drugačni od
0b00000010 potem se nekaj zgodi.Imam uporabljajo naslednje kodiranja, vendar nisem prepričan.

if (pcfg_temp! = ((0b00000111) | | (0b00001110) | | (0b00000100) | | (0b00000010)))
(
.....
)

Moj dvom je, da je rezultat (0b00000111) | | (0b00001110) | | (0b00000100) | | (0b00000010)) je boolean, da morda to ni pravi način.Vsak predlog?

In drugič:

void funkcija ()
(
union READ_DATA tris_desired;
union READ_DATA tris_now;
union READ_DATA bidir_now;
union READ_DATA tris_final;
union READ_DATA error_final;
BYTE tris_temp = 0x00;
BYTE port_id = 0x00;
BYTE pin_id = 0x00;tris_desired.ReadData = 0x00;
tris_now.ReadData = 0x00;
bidir_now.ReadData = 0x00;
tris_final.ReadData = 0x00;
error_final.ReadData = 0x00;
....

)

Če jaz raba to potem prevajalnik dela ok, ampak, če uporabim namesto->void funkcija ()
(
union READ_DATA tris_desired;
union READ_DATA tris_now;
union READ_DATA bidir_now;
union READ_DATA tris_final;
union READ_DATA error_final;tris_desired.ReadData = 0x00;
tris_now.ReadData = 0x00;
bidir_now.ReadData = 0x00;
tris_final.ReadData = 0x00;
error_final.ReadData = 0x00;BYTE tris_temp = 0x00;
BYTE port_id = 0x00;
BYTE pin_id = 0x00;
....

)

Prevajalnik mi pravi, da tris_temp, itd se ni prijavil żwhy?.

Hvala veliko vnaprej,

mimoto

 
Poskusite to:

if ((pcfg_temp! = 0x07) & & (pcfg_temp! = 0x0d) & & (pcfg_temp! = 0x04) & & (pcfg_temp! 0x02 =))
(
nekaj storiti;
)

ne morate določiti svoje sindikalne:

union READ_DATA
(
BYTE tris_desired;
BYTE tris_now;
BYTE bidir_now;
BYTE error_final;
);

v C se morate prijaviti vse spremenljivke v funkciji pred kakršno koli kodo, to zakaj prevajalnik pritožuje.

 
btbass wrote:

Poskusite to:if ((pcfg_temp! = 0x07) & & (pcfg_temp! = 0x0d) & & (pcfg_temp! = 0x04) & & (pcfg_temp! 0x02 =))

(

nekaj storiti;

)

 
Seveda se strinjam, vendar je niso opredeljeni konstante.
# define ni tako dober v teh dneh?
Boljši je:

const unsigned char LAMP_ON = 0x07;

 
btbass wrote:

Seveda se strinjam, vendar je niso opredeljeni konstante.

# define ni tako dober v teh dneh?

Boljši je:const unsigned char LAMP_ON = 0x07;
 
Imam rešitev, ki bodo z veseljem za vse vas:

uporaba enum ...

zakaj ...?

preprost:

Vrednotenja zagotavljajo priročen način povezati stalnimi vrednostmi z imeni, alternativa # define s to prednost, da se lahko vrednosti, ustvarjene za vas.Čeprav lahko spremenljivke enum tipov se razglasi, prevajalniki ni treba preveriti, kaj si shranite v tako spremenljivka je veljavna vrednost za
enumeration.Kljub temu, štetje spremenljivk ponujajo možnost preverjanja in so zato pogosto bolje
opredeljuje kot #.Poleg tega lahko najti in odstraniti napako lahko natisnete vrednosti štetja spremenljivk v njihovih

enum (pobegne BELL = '\', BACKSPACE = '\ b', TAB = '\ t',
Newline = '\ n', VTAB = '\ v', RETURN = '\ r');
simbolični obliki.

 
manitooo wrote:

Vrednotenja zagotavljajo priročen način povezati stalnimi vrednostmi z imeni, alternativa # define s to prednost, da se lahko vrednosti, ustvarjene za vas.
 
V vgrajeni morate uporabljati C # define IME
const bo dodelila za spomin v vašem programu spomin in večina LC nimajo dodeliti prostora!
z uporabo # define Preprocessor bo nadomestek vrednost, preden pripravijo tako, da je dejansko enako kot pisanje z vrednostjo.Ampak to je malo bolj jasno.

Mislim, da enum so ravna enako kot opredeljuje, vendar nisem prepričan o tem.

const bi bilo dobro v C , ampak moč const ni v opredelitvi, vendar pri definiranju konstante const član funkcij, const iterators, ...

Antharax

 
emum tipi ponavadi so opredeljene kot celo število (2 bytes long!) Če ste uporabili # define's lahko določite eno bajt konstante.Zelo pomembno je, če imate 8bit krmilnik z majhnega pomnilnika.

 
Zato sem predlagal const je, da ko naredite statično analizo z lint ali uporabo iskalnik napak, potem vidiš konst ime.
Če uporabljate # define, ki ste jo pravkar videli smisel številko.
Če je pomnilnik problem, uporabite # define.
Če statična analiza, ali uporabite iskalnik napak, uporaba konst.

 

Welcome to EDABoard.com

Sponsor

Back
Top