C6268
تحذير C6268: ترتيب العمليات غير صحيحة: ()(<TYPE2>) <TYPE1> x + y. ممكن مفقود أقواس في ((<TYPE2>) (<TYPE1>) x + ص)
وهذا تحذير تشير إلى أن تعبير معقد لفريق العمل قد تشمل مشكلة أسبقية عند تنفيذ مؤشر الحسابي. لأن مجموعة قوالب المزيد عن قرب من العوامل الثنائية، النتيجة قد لا يكون الغرض المبرمج. في بعض الحالات، يؤدي عيب هذا سلوك غير صحيحة أو عطل في برنامج.
في تعبير مثل كـ:
(char *)p + offset
الإزاحة هو تفسير كقيمة إزاحة في أحرف؛ ومع ذلك، تعبير مثل:
(int *)(char *)p + offset
هو فهي مكافئة ل:
((int *)(char *)p) + offset
ولذلك الإزاحة هو تفسير كقيمة إزاحة في الإعداد الصحيحة. بمعنى آخر، فإنه هو فهي مكافئة ل:
(int *)((char *)p + (offset * sizeof(int)))
حيث هو غير المحتمل أن يكون الغرض المبرمج.
اعتماداً تشغيل الحجم النسبي من النوعين، يمكن أن يؤدي هذا إلى تجاوز المخزن مؤقت.
مثال
يلي تعليمات برمجية ينشئ هذا التحذير:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)(char *)p + offset_in_bytes;
// code ...
}
إلى تصحيح هذا التحذير، استخدم تعليمات برمجية التالية:
void f(int *p, int offset_in_bytes)
{
int *ptr;
ptr = (int *)((char *)p + offset_in_bytes);
// code ...
}