[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: а кто C хорошо знает?



On Mon, 8 Oct 2012, Eugene Berdnikov wrote:

On Mon, Oct 08, 2012 at 03:42:40PM +0400, yuri.nefedov@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 рассылка. :-)

Reply to: