On Mon, 8 Oct 2012, Eugene Berdnikov wrote:
On Mon, Oct 08, 2012 at 03:42:40PM +0400, yuri.nefe...@gmail.com wrote:
Ho!
1) неименованные структуры - это опять же расширение
над ansiC. Если же именовать, то прийдется писать везде P.P
2) в вызове функции все равно прийдется писать P.P
Эта проблема легко и просто решается препроцессором:
#define myobj topname.obname
myobj.count = 1;
myobj.data[0] = 11;
...
Трюк описан в разных файликах под /usr/include/. Наверное, в книжках тоже.
Решить то можно, а осадочек то останется...
1) Про массивы переменных надо забыть.
2) При таком подходе union вообще говоря не нужен,
можно написать что-то типа:
#define SOMETH_STAT(NAME, SIZE) \
struct { unsigned count; unsigned element[SIZE]; }_NAME; \
_NAME.count=(SIZE); \
struct something *NAME = (struct something *) &_NAME;
...
SOMETH_STAT(t,6);
for(i = 0; i < t->count; i++) {
t->element[i] = 30+i;
}
print_something(t);
И в этом подходе уже абсолютно очевидно, что на каждую
переменную создается по своей структуре, так что
компилятору придется потрудится. Возможно оптимизация кода
ухудшится.
Вообще говоря вопрос к Диме Обухову: какая цель
в возможности задать размер массива во время компиляции?
Меньше цпу? Сомнительно. Без профайлера не поверю.
Экономия памяти? Ну совсем копейки.
На большее фантазии у меня не хватает.
P.S. Аксакалы, может вам лучше 2гугл по девелоперские рассылки, пока
здесь молодёжь дебиан мусолит? :)
Вполне даже дебиан. Тонкости работы gcc. Ни чем не хуже чем
тонкости функционирования ssd, или samba-4.
Это же user рассылка. :-)