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 ...
}