preproccessor feil i IAR og codevison

N

naderus

Guest
Hei,
Jeg vil skrive noe som dette i IAR eller Codevision koden min:

# define A sizeof (long)
# define B 100 - A
# if (A <C)
# error no
# endif

men når jeg kompilere den med IAR får denne feilmeldingen:

Feil [Pe059]: function samtalen er ikke tillatt i en konstant uttrykk

og når kompilere den med codevision får denne feilmeldingen:

Advarsel: undefined symbol 'sizeof', forutsatt null
Feil: fraværende ')'
(Jeg får denne feilen på linjen "# if (A <C)")men når jeg skriver denne koden:

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

den IAR og codevision begge er kompilert uten feil.
Jeg også teste den med MPLAB 7 som er for PIC og får ikke noe problem.
Kan noen fortelle meg hva er galt? Det er veldig viktig for meg at
skrive koden min liker det.

 
Jeg har testet koden i codevision (gamle versjon, 1.2.37) og feilen skyldes at sizeof funksjonen vil bli vurdert under kjøring, men # define argumentet bør være konstant!
Hvis du erstatter "sizeof (long)" med 4, vil du ikke få denne feilen.(Dersom A <C, selvfølgelig vil du få en feilmelding fra # feilen direktivet).

I codevision lenge er 4bytes, en konstant, så du kan bare sette 4.Vurderer sizeof ville være nyttig for portabilitet.

 

Welcome to EDABoard.com

Sponsor

Back
Top