preproccessor fejl i IAR og codevison

N

naderus

Guest
Hej,
Jeg vil gerne skrive noget lignende dette i IAR eller Codevision min kode:

# define A sizeof (lang)
# define B 100 - A
# if (A <C)
# fejl ikke
# endif

men når jeg oversætte det med IAR få denne fejl:

Fejl [Pe059]: funktion opkald er ikke tilladt i en konstant udtryk

og når oversætte det med codevision få denne fejl:

Advarsel: undefined symbol 'sizeof', antages nul
Error:
missing ')'
(Jeg får denne fejl på linjen "# if (A <C)")men når jeg skriver denne kode:

# define A sizeof (lang)
# define B 100 - A

Det IAR og codevision begge er kompileret uden nogen fejl.
Jeg vil også prøve det med MPLAB 7, der er for PIC og ikke får noget problem.
Kan nogen fortælle mig, hvad er det galt? Det
er virkelig vigtigt for mig, at
skrive min kode kan lide det.

 
Jeg
har testet koden i codevision (gammel version, 1.2.37), og fejlen skyldes, at sizeof funktion ville blive bedømt på kørselstidspunktet, men # define argument bør være konstant!
Hvis du udskifter "sizeof (long)" med 4, vil du ikke få denne fejl.(Hvis A <C, selvfølgelig ville du får en fejl fra # fejl direktivet).

I codevision længe er 4bytes, en konstant, så kan du bare sætte 4.Evaluating sizeof ville være nyttigt for portability.

 

Welcome to EDABoard.com

Sponsor

Back
Top