Windows SDK ile derleyen bu kod var:Tüm bitleri 32 bit türünde ayarlamak için 0xFFFFFFFF güvenilir bir yol kullanıyor mu?
UINT cFiles = DragQueryFileW(hDrop, 0xFFFFFFFF, NULL, 0);
DragQueryFileW()
'in bu imzası vardır:
UINT DragQueryFileW(HDROP, UINT, LPWSTR, UINT);
ve UINT
, SDK başlıklarında şu şekilde tanımlanmıştır:
typedef unsigned int UINT;
int
'nin kesinlikle 32-bit olduğu platform. Her zamanki gibi, UINT
gibi türler sistem bitliği üzerinde sabit genişliğe sahip olacaklardır, bu yüzden aynı kodun başka bir platformda yeniden derlenmesi gerekiyorsa, DragQueryFileW()
'un bir şekilde yeniden düzenlenmesi durumunda UINT
haritasının üzerine UINT
haritasına sahip olacak bir typedef
olacaktır. uygun bir 32 bit işaretsiz tip.
Artık 0xFFFFFFFF
sabitine bakarak statik bir analiz aracı var ve bunun tartışılmaz bir sihir numarası ve one should use -1
instead olduğunu düşünüyor. Elbette -1
iyi ve portatif iken 0xFFFFFFFF
sabitinin nasıl kullanıldığını göremiyorum, çünkü bu tip bir portun taşınması bile 32-bit ve sabit olacak.
-1
yerine 0xFFFFFFFF
kullanarak tüm bitleri güvenli ve taşınabilir bu senaryoda ayarlamak için mi?
, statik analiz şikayet olabilir. – iammilind
Statik analiz aracında yanlış bir pozitif gibi görünüyor. Bu sabiti her zaman 32-bit bir bağlamda kullandığınızı göremeyebilir. –
Bunun yerine '~ 0u' kullanın. – ybungalobill