описываю структуру Код (Text): typedef struct _XX { int a; int b; .. double Mass[0]; }XX,*PXX; вообще размер Mass может быть любым (память под структуру выделяется динамически, в зависимости от размера массива). корректно ли в данной ситуации писать Mass[0]? в этом случае компилятор выдаёт предупреждение, что мне не очень нравится. warning C4200: nonstandard extension used : zero-sized array in struct/union Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array или лучше указывать Mass[1]? смотрел аналогичные структуры в ДДК. там описано как Mass[1]. но в этом случае не совсем удобно выделять память. приходится извращаться, что делает код не красивым. PXX pxx = LocalAlloc(0,sizeof(XX)+NumElements*sizeof(double)-sizeof(double));
По поводу массивов нулевой длины распространялся kaspersky не так давно. Но вообще, обычно используют #3, если данные идут "следом" за структурой, а структура может быть переменной длины, или #2, если структура должна быть фиксированной длины, а данные могут располагаться где угодно.
размер стр-ры будет больше на размер указателя. по идее надо, чтобы размер стр-ры был равен размеру без массива. хорошо. а если всё-таки определить массив нулевой длины и сделать: Код (Text): #pragma warning(disable:4200) // массив нулевой длины typedef struct { . . . }; #pragma warning(default:4200) На сколько это корректно?
Не понял, в каком смысле? Или в прямом Вроди ведь работает всё, и даже так как надо. Код (Text): struct { int x; int mass[]; }Z; sizeof(Z)=4; Или я вопрос не так понял?
cppasm От я и говорю - ты гений. Стало быть, ms использует array[1] только для совместимости со стандартным (!) си, от которого всё равно толку не будет, ибо psdk не компилируется при отключении ms specific расширений С. Т.о., array[] рулит.
Скорее наверное для совместимости с ANSI C. Я такую штуку как раз в программах на чистом С использую, и компилятор именно сишный, без плюсов (не MS). Всё работает на ура. PS: я просто подумал ты издеваешся, т.к. вроди ничего оч умного я не сказал