gcc 4.9 ile gömülü ARM programlama yapıyorum. Şirketimin varsayılan dev araç yapılandırmasında olduğu için -Wconversion
anahtarını kullanıyorum. Ben stdint.h types (uint8_t, uint32_t, vb) kullanıyorum.gcc derleyici uyarılarını kaldırmak için typecasting kullanma
derleyici uyarısı Bir bileşik atama ve hatta basit toplama işlemini her zaman oluşturur. Örneğin: here ve here tartışıldığı gibi
uint8_t u8 = 0;
uint16_t u16;
// These cause warnings:
u8 += 2;
u8 = u16 >> 8;
Bunu düzeltmek için "yaygın yöntem", alçı kullanmaktır:
bu çirkin olmasının yanı sırau8 = (uint8_t)(u8 + 2);
u8 = (uint8_t)(u16 >> 8);
, ben inandırıcı kanıt olarak yayınlanmaya devam döküm genellikle kötü bir uygulamadır.
Sorularım:
- Neden bu şekilde tipleştiriyor kullanmak kötü?
-Wconversion
'u atlayıp derleyicinin benim için örtülü dönüşümler yapmasına izin vererek herhangi bir şeyimi kaybeder miyim?
Bu durumda, yazım hatası hakkında 'kötü' bir şey yoktur. Eğer bir şey varsa, anlambilimsel, aritmetik, kesik, vb. Gibi anlamlarını düşündüğünüzü gösterir - ve bundan memnun kalırsınız. –
@BrettHale, en azından cast *, tüm etkileri düşündüğünüz ve bunlardan memnun olduğunuz * iddiaları. Sen yapmasan bile, ya da değilsin. –
@BrettHale, derleyiciyi kapatmanın olası hatalı kodlardan daha fazla önem vermesi durumunda oraya yayın yapabilir (scoff yapmayın - bu olur). Tüm etkileri düşündüğünüzü düşünüyorsanız, bunu yapabilirsiniz, ama yanılıyorsunuz. Ya da daha iyisini bilmiyor olsan bile. Dökümün doğası gereği olmadığını, mutlaka * kötü * olduğunu kabul ediyorum, ancak ilk etapta dökülme gerekliliğinden kaçınmak * daha iyi *. –