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