C: #define, XC8

Milan B. milan na bastl.sk
Pátek Červen 15 02:51:20 CEST 2018


On 14.06.2018 21:13, Jan Waclawek wrote:
> Ale to znamena, ze vo faze 4, ked sa maju vykonavat tie
> preprocesorove direktivy, tak to #if uz nie je preprocesorova direktiva,
> lebo nie je na zaciatku riadku (6.10#2)

Este upozornujem na 6.10.3.4 odst. 3: The resulting completely 
macro-replaced preprocessing token sequence is not processed as a 
preprocessing directive even if it resembles one, but all pragma unary 
operator expressions within it are then processed as specified in 6.10.9 
below.

Takze po rozvinuti makra sa direktivy ktore rozvojom makra vzniknu znova 
nevyhodnocuju - aj ked su na zaciatku riadku (#if v uvedenom priklade)

Navyse vnutri makra sluzi znak #  ako stringify operator. #if sa snazi 
interpretovat ako "obsah parametra if" a kedze hodnota parametra s 
menom  if je neznama, tak xc8 preprocesor  vypise varovanie a  
substitucia neprebehne   .

preprocesor u xc8 vyhlasi par varovani na tuto temu:
delay_ms: 14: (172) formal parameter expected after # (warning)
delay_ms: 14: (172) formal parameter expected after # (warning)
delay_ms: 14: (172) formal parameter expected after # (warning)

Vystup z preprocesora je takyto:

#if 10 < 256 delay_ms_uint8_t(10) #else delay_ms_uint16_t(10) #endif;

co sa zrejme kompilatoru nepaci

Experimentalny dokaz:

Po zmene zadania na:
#define delay_ms(DelayTime,if) \
...
a volanie:
delay_ms(10,555);

je vystup z preprocesora takyto:
delay_ms: 14: (172) formal parameter expected after # (warning)
delay_ms: 14: (172) formal parameter expected after # (warning)
"555" 10 < 256 delay_ms_uint8_t(10) #else delay_ms_uint16_t(10) #endif;

Takze #if bolo nahradene stringifikovanym 555 - "555"

Asi tak

-m-



> Ale nerobte si vrasky, napiste pokojne funkciu s tymto istym obsahom,
> oznacte static inline, a kazdy slusny (a polovica tych neslusnych)
> prekladac urobi to co chcete.
>
> Ledazeby ste mali vypnutu optimalizaciu, co je blbost.
>
> wek


------------- další část ---------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3984 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20180615/fb5ac5a6/attachment.bin>


Další informace o konferenci Hw-list