C6328

تحذير C6328: <نوع> الذي تم تمريره كمعلمة <رقم> عند <نوع> هو مطلوبة في الدعوة إلى <دالة>

للإجراءات بدءاً من هو *، تمرير وسيطة من النوع charقد العائد نتائج غير متوقعة. على سبيل المثال، SBCS أو MBCS أحرف فردية البايت من النوع charمع قيمة أكبر من 0x7F هو سالبة. إذا كان charهو الذي تم تمريره، المحول البرمجي فقد يتم تحويل القيمة إلى موقع intأو موقع long. قد تكون هذه القيمة بتوسيعها على تسجيل بواسطة المترجم، مع نتائج غير متوقعة. على سبيل المثال، isspaceيقبل وسيطة من النوع int؛ ومع ذلك، النطاق الصحيح للقيم لوسيطة إدخال الخاص به هو:

0 <= c <= 255، بالإضافة إلى خاص القيمة EOF.

مثال

بشكل افتراضي، charهو موقع اكتب في C + + Vهوual، لذا نطاق قيم لمتغير من نوع حرف هو-128 < = c < = 127. ولذلك، إذا قمت بتنفيذ ما يلي:

#include <iostream>

void f( )

{

char c = -37;

int retVal = isspace( c );

// code...

}

cيمكن توسيع إشارة إلى موقعintقيمة-37، الذي هو خارج النطاق الصالح لisspace.

لصحة هذه المشكلة استخدم static_cast، كما هو موضح في التالية تعليمات برمجية:

#include <iostream>

void f( )
{
   char c = -37;
   int retVal = isspace( static_cast<unsigned char> (c) );
   // code...
}

موجود تحذير C6328 خصيصا إلى تصفية هذا الخطأ. على أحرف ASCII 7 بت النطاق تحويل هو غير الضرورية، ولكن الأحرف و/الخارج نطاق سيؤدي وضع أو تعطل في وقت التشغيل.