Daha küçük veri türlerinden daha büyük veri türlerine örtük dönüşümleri algılar
Gerekçe: Derleyici, kaynak türün değer aralığı hedef türün değer aralığı içinde tamamen
yer aldığında farklı türlerin atanmasına izin verir. Ancak, derleyici koda mümkün
olduğunca geç bir dönüşüm ekleyecektir. lint := dint * dint türündeki bir atama için derleyici örtük dönüşümü yalnızca çarpma işleminden sonra
gerçekleştirir: lint := TO_LINT(dint * dint). Bu nedenle bir taşma kesilir. Bunu önlemek için, öğeleri zaten dönüştürebilirsiniz:
lint := TO_LINT(dint) * TO_LINT(dint). Bu nedenle, derleyicinin örtük dönüşümleri uyguladığı konumları bildirmek, bunların
tam olarak amaçlanan şey olup olmadığını kontrol etmek için yararlı olabilir. Ayrıca,
açık dönüşümler, daha kısıtlayıcı tür denetimlerine sahip diğer sistemlere taşınabilirliği
artırmak için kullanılabilir.
Önemliymiş: Düşük
Örnek
PROGRAM PLC_PRG VAR byTemp : BYTE; usiTemp : USINT; uiTemp: UINT; iTemp : INT; udiTemp: UDINT; diTemp : DINT; uliTemp : ULINT; liTemp : LINT; lwTemp : LWORD; lrTemp : LREAL; END_VAR liTemp := iTemp; // SA0130 uliTemp := usiTemp; // SA0130 lwTemp := udiTemp; // SA0130 lrTemp := byTemp; // SA0130 diTemp := uiTemp; // SA0130 byTemp.5 := FALSE; // OK (BIT_BOOL conversion) --> SA0130: Implicit widening conversion from type 'INT' to type 'LINT' --> SA0130: Implicit widening conversion from type 'USINT' to type 'ULINT' --> SA0130: Implicit widening conversion from type 'UDINT' to type 'LWORD' --> SA0130: Implicit widening conversion from type 'BYTE' to type 'LREAL' --> SA0130: Implicit widening conversion from type 'UINT' to type 'DINT'
Ayrıca bakınız