Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #84


Клуб профессиональных программистов "Весельчак У"
Информационная рассылка сайта и форума.  Выпуск No84 (2009-12-20).

Здравствуйте, уважаемые читатели!

Сегодня в выпуске:



Обращаем ваше внимание на обновления в нашей Wiki, приглашаем принять участие в пополнении материала: освещаем тонкости написания программ, работы с ПО и многое другое.

Обновился и раздел ЧаВо, дополнения, комментарии приветствуются.



Что делать, если нет гибкого диска, но ПО требует его наличия.

Некоторые системы требуют хранения «секретных данных» на сменных носителях. И это во время новейших технологий!

Но, как известно, не все вечно, а тем более современные дискеты. И несмотря на наличие новых технологий, дискеты пока не отмирают. Но вот что касается их качества, то оно ухудшается с каждым годом.

Это было маленьким отступлением. А теперь приступим к делу. Но сначала все по порядку.


Задача: хранение ключей на жестком диске.

Решение.



C:\>subst /?
Сопоставление имени диска указанному пути.

SUBST [диск1: [диск2:]путь]
SUBST диск1: /D

  диск1:         Виртуальный диск, который сопоставляется указанному пути.
  [диск:]путь    Физические диск и путь,
                 которым сопоставляется виртуальный диск.
  /D             Удаление ранее созданного виртуального диска.

Введите SUBST без параметров для вывода текущего списка виртуальных дисков.


На текущий момент у меня нет назначенных виртуальных дисков. Создаем каталог, где будем хранить ключи. И сопоставляем диск «B:» требуемому пути.



C:\>mkdir d:\key
C:\>subst b: d:\key
C:\>subst
B:\: => D:\key
C:\>dir b:
 Том в устройстве B имеет метку EXT
 Серийный номер тома: 34CC-3811

 Содержимое папки B:\

18.12.2009  11:15    <DIR>          .
18.12.2009  11:15    <DIR>          ..
               0 файлов              0 байт
               2 папок  12 553 900 032 байт свободно


Теперь преспокойно указываем местом хранения сменный диск «B:».

Казалось бы, ВСЁ, что еще надо?

Но не тут-то было. Попалась в руки программа, которая требовала диск «A:».

...

Целиком прочесть статью можно на нашем сайте, в разделе «Администрирование ОС::Windows».

  • Программирование :: .NET технология от и до
  • Жизнь продолжается, но уже в другом направлении.  :mrgreen:
    Есть тест-проект на c#. Теперь хотят сделать проект на с++, в котором было бы возможно вызывать уже готовые тесты из моего c#-проекта.
    Ну а для этого надо их как-то поженить...  

    Нашла вот такие статьи:

    http://www.computerbase.de/forum/showthread.php?t=636766 (эта на немецком, но код читабелен) )
    В ней идет ссылка на эту статью - уже на английском:
    http://www.csharphelp.com/2006/5/c-classes-as-com-objects/

    Сделала 2 учебных проекта (на c# - CsharpCode, на с++ - NativeCode).
    Попыталась реализовать то, что написано. Имею:
    1) с++-пример с немецкой страницы не компилируется вообще
    2) пример с англоязычной страницы компилируется, но при попытке вызова CoCreateInstance() возвращает неутешительный результат "CoCreateInstance has not been called"...

    Осталось по мелочам понять - и где же собака зарыта?

    Да, насчет c#-проекта:
    - есть возможность либо каждому классу добавить парметр
    [System.Runtime.InteropServices.ComVisible(true)]
    - а можно в настройках проекта сказать "build -> register for com interop "

    пробовала включать их по очереди и все вместе - на результат это не повлияло... :(

    И еще - команды для создания tlb и регистрации длл-ли я написала в конце файла ManagedCode.cs.
    Все это удобноо вызывать из старт->программы->microsoft .net framework sdk 2.0 -> sdk command prompt

    Соответственно, вопрос - может, кто-то уже с этим сталкивался?
    Уже самой интересно стало!
  • Ситуация:
    рабочая - студия 2005, еще на днях установила 2008+sp1.

    есть dll на managed+unmanaged c++. Компилируется без проблем.
    При просмотре с помощью dependency walker-а показывает, что эти 3 длл-лины не найдены на компе.
    Сделала ход конем - посмотрела эту длл-лину на машинах коллег - у них все выглядит пристойно... (кстати, на обеих машинах есть, как и на моей, обе студии).

    Вопрос - где прописывается путь к этим длл-лям?
  • Программирование :: С/С++ :: ANSI С/С++
  • Не работают типовые алгоритмы построения деревьев в программах под C (не C++). Обе взяты с сайтов.
    Tree2.c (с небольшими модификациями под С - с comp-science.narod.ru/Progr/BinTree.htm
    Tree1.c (в 2х вариантах подC и под С++) с сайта khpi-iip.mipk.kharkiv.edu/library/datastr/book_sod/kgsu/din_0041.html
    в Tree1.c, Tree1.cpp валится на *Tree = NULL; //в посылке закомментирован
    и на *p==NULL в void Search
    Такое впечатление, что данный тип данных не может сравниваться с NULL
    1. Программы Tree1.c,  Tree1.cpp не срабатывают при выполнении на  операторе *Tree = NULL, а также при его отмене на операторе  *p==NULL в void Search
    2. Программы Tree2.c не срабатывают при выполнении на  операторе  if (A->inf < vsp->inf)
    при этом A->inf =5 а vsp->inf не определено!!! несмотря на выполненное  присваивание vsp = T;
    Компилятор Borland C++ Builder v.6 под Windows
    ------------------------------
    Код:
    //Tree1.c
    #include <stdlib.h>
    //khpi-iip.mipk.kharkiv.edu/library/datastr/book_sod/kgsu/din_0041.html
    struct node
        {
            int Key; // Ключ вершины.
            int Count; // Счетчик количества вершин с одинаковыми ключами.
            struct node *Left; // Указатель на "левого" сына.
            struct node *Right; // Указатель на "правого" сына.
        };
    void Search (int x, struct node **p);

    void Search (int x, struct node **p)
    // Поиск вершины с ключом x в дереве со вставкой (рекурсивный алгоритм).
    // *p - указатель на корень дерева.
    {
      if (*p==NULL)
      { // Вершины с ключом x в дереве нет; включить ее.
        *p = (struct node *) malloc (sizeof(struct node));
        (**p).Key = x; (**p).Count = 1;
        (**p).Left = (**p).Right = NULL;
      }
      else //Поиск места включения вершины.
        if (x<(**p).Key) //Включение в левое поддерево.
           Search (x,&((**p).Left));
        else if (x>(**p).Key) //Включение в правое поддерево.
               Search (x,&((**p).Right));
             else (**p).Count = (**p).Count + 1;
    }

    void main()
    { // Постр бинарного дерева. *Tree - указатель на корень дерева.
       struct node **Tree;
       int el[]={5,4,7,2,3,10,8,9,6,-2,20,-5,12,-15,0};
       int i;
     // *Tree = NULL; // Построено пустое бинарное дерево.
      for (i=0;i<=14;i++)
         { Search (el[i],Tree); }
      getch();
    }
    -----------------------------------------------
    //Tree2.c
    #include <stdlib.h>
    //comp-science.narod.ru/Progr/BinTree.htm
    struct BTree
    {
      int inf;
      struct BTree *L; struct BTree *R;
    };

    struct BTree* InsIter(struct BTree *T,int x)
    {/* Итеративный вар добавл эл в дерево, C++ */
     struct BTree *vsp, *A;
      A = (struct BTree *) malloc(sizeof(struct BTree));
      A->inf=x; A->L=0; A->R=0;
      if (!T)
        T=A;
      else         {
      vsp = T;
      while (vsp != NULL)
       {
        if (A->inf < vsp->inf)
        if (!vsp->L)
          {vsp->L=A; vsp=A->L;}
       else vsp=vsp->L;
       else if (!vsp->R)
           {vsp->R=A; vsp=A->R;}
            else vsp=vsp->R;
       }//while
                    }
    return T;
    }

    void main()
    {
      struct BTree **T;
       int el[]={5,4,7,2,3,10,8,9,6,-2,20,-5,12,-15,0};
       int i;
     // *T = NULL;
      for (i=0;i<=14;i++)
         { InsIter(T,el[i]); }
    }
  • Программирование :: С/С++ :: WinAPI & Visual C++
  • Возникла необходимость реализовать в своей программе (пишу на vs 2008 express) property sheet с помощью winapi. Желательно сделать примерно как в студии: убраны стандартные кнопки, размер окна неограничен, используется прокрутка.

    В связи с этим 3 проблемы-вопроса:
    1) При работе с окошком property sheet главное окно теряет фокус, и наоборот (см. картинку).
    2) Неограниченный размер окна симулируется заданием больших значений размеров в ресурсных шаблонах для страниц  контрола. Может быть возможно динамически изменять их размер? Или есть способ лучше для симуляции такого поведения?
    3) Не совсем по property sheet, более общая: как сменить стиль отображения стандартных контролов? (см. картинку)

    Код не привожу, в связи с достаточно общими вопросами, но собрал тестовый пример. Посмотрите, подскажите, если не трудно.
    Пример состоит из простого окошка с дочерними статус баром, рабочим скролл баром и листом свойств. Также см. картинку.
    P.S. Про конкурентов - ну, наверное, не стоит уточнять, что это такой дерзкий юмор :)

  • Наверное, сразу нужно уточнить, что пользуюсь vs 2008 express, в которой отсутствует MFC.

    Ну а мой вопрос в том, если обобщая, как правильно разместить окошко диалога в классе. Ведь процедура окна в классе должна быть объявлена статической, значит и используемые в ней переменные тоже. В связи с этим, возникают проблемы.

    Вот конкретный пример: пользовательское окошко подсказки (tooltip).

    -- В конструкторе m_hWndToolTip = CreateWindow (), диалоговая процедура TTDlgProc ().
    -- static vector<ETOOLINFO>vTools; - массив структур добавленных инструментов, содержащий и оригинальные процедуры этих интрументов.
    -- SubclassProc  () - субклассинг, эта процедура использует информацию из vTools (оригинальные процедуры инструментов под субклассингом), указатель m_hWndToolTip и т.д.

    Код:
    class EncToolTip
    {
    ...

    // Tooltip window:
    private:
    static HWND m_hWndToolTip;
    static HWND m_hWndTTStatic;
    private:
    static LRESULT CALLBACK TTDlgProc (HWND, UINT, WPARAM, LPARAM);

    // Tools:
    private:
    static vector<ETOOLINFO>vTools;     // Массив структур
    static ETTADATA adata;                      // Структура вспомогательных данных
    private:
    static LRESULT CALLBACK SubclassProc (HWND, UINT, WPARAM, LPARAM);

    ...
    };

    Ну так вот, все прекрасно работает, пока не пытаешься создать второй экземпляр данного класса  :shuffle:
    Подскажите, пожалуйста, как сделать правильно.

    Использую express постоянно, все время возникает желание организовать контролы в иерархию. Может быть такое уже релизовано?
  • Кто-нибудь знает, как называется событие - разворот выпадающего списка ComboBox при нажатии на стрелочку в квадратике или на него (стиль DropList)?
  • Программирование :: Delphi
  • Есть следующий код:
    Код:
    type
      StringGridForEnteringData=class(TStringGrid)
      public
        bFlagOfAddingAlternative: Boolean;
        bFlagOfEditingCell: Boolean;
        rowOfEditingCell: Integer;
        colOfEditingCell: Integer;
        EditingValue: String;
        constructor Create(Owner: TComponent);
        destructor Destroy();
        procedure StartEditCell(row, col: Integer);
        procedure EndOfEditingCell(row,col: Integer; const value: String);virtual;abstract;
        procedure SetEditText(ACol, ARow: Integer; const Value: String);override;
        function SelectCell(ACol, ARow: Longint): Boolean;override;
        procedure KeyPress(var Key: Char);override;
        procedure DoExit();override;
        procedure Clear();
    end;

    constructor StringGridForEnteringData.Create(Owner: TComponent);
    begin
      inherited;
      Options:=Options+[goEditing,goColSizing];
      bFlagOfAddingAlternative:=false;
      bFlagOfEditingCell:=false;
      rowOfEditingCell:=-1;
      colOfEditingCell:=-1;
      EditingValue:='';
    end;

    destructor StringGridForEnteringData.Destroy();
    begin
      inherited;//<-вылетает здесь
    end;

    type
      StringGridForEnteringDataMethod4=class(StringGridForEnteringData)
      public
        constructor Create(Owner: TComponent; Cell00: String; Captions: Array of String; dimension: Integer);
        destructor Destroy();
        procedure EndOfEditingCell(row,col: Integer; const value: String);override;
    end;

    constructor StringGridForEnteringDataMethod4.Create(Owner: TComponent; Cell00: String; Captions: Array of String; dimension: Integer);
    var i: Integer;
    begin
      inherited Create(Owner);
          FixedRows:=1;
          FixedCols:=1;
          ColCount:=dimension+1;
          RowCount:=dimension+1;
          Cells[0,0]:=cell00;
          for i:=0 to dimension-1 do
          begin
            Cells[i+1,0]:=Captions[i];
            Cells[0,i+1]:=Captions[i];
          end;
    end;

    destructor StringGridForEnteringDataMethod4.Destroy();
    begin
      inherited;
    end;

    Вопрос такой, почему, если во время редактирования Grid-a типа StringGridForEnteringDataMethod4 вызвать деструктор, то программа вылетает c ошибкой Access violation at address 0000000?
  • Программирование :: Программирование 1С
  • Видел у людей в 1С есть загруженные справочники ДПИ и банков. Где такое берется и как импортируется? Боюсь как бы чегото важного не пропустить )))
  • Здравствуйте.
    1с 8.0. УТ.Режим серверный
    Подскажите, наверняка кто-то из вас, программистов 1с, делает «срез» базы . Поделитесь опытом.
    Как выделаете - так:

        1.  Вы формируете остатки в той же базе на определенную дату
        2.  Удаляете старые документы в той же базе
       А. сначала установка пометки на удаление, потом удаление стандартными средствами
       Б.  или может без пометки на удаление, а используете непосредственное удаление

    или, может, вы делаете «срез» вот так:

       1.  Вы формируете остатки в той же базе на определенную дату
       2.   В новую базу переносите документы, справочники, независимые регистры накопления …
  • Прошу подсказать, по каким книгам можно преимущественно самому научиться программированию в 1С (то есть, внести изменения, адаптировать под свои задачи, а не просто, как обычному пользователю). Если можно, дайте ссылки на закачку нужной книги.
  • Всем привет! Мучаюсь с запросом уж который день) Помогите, кто чем может) Вот текст запроса:

    ВЫБРАТЬ РАЗЛИЧНЫЕ
        ЗаказыПокупателейОстатки.Номенклатура,
        ПРЕДСТАВЛЕНИЕ(ЗаказыПокупателейОстатки.Номенклатура),
        ЗаказыПокупателейОстатки.КоличествоОстаток КАК КолЗаказов,
        КомплектующиеНоменклатуры.Комплектующая КАК Комплектующая,
        ПРЕДСТАВЛЕНИЕ(КомплектующиеНоменклатуры.Комплектующая),
        КомплектующиеНоменклатуры.Количество КАК КолВКомплекте,
        ЗаказыПокупателейОстатки.КоличествоОстаток * КомплектующиеНоменклатуры.Количество КАК ИтогПоЗаказу
    ИЗ
        РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
            ПО ЗаказыПокупателейОстатки.Номенклатура = КомплектующиеНоменклатуры.Номенклатура
    ГДЕ
        ЗаказыПокупателейОстатки.КоличествоОстаток > 0

    СГРУППИРОВАТЬ ПО
        ЗаказыПокупателейОстатки.Номенклатура,
        ЗаказыПокупателейОстатки.КоличествоОстаток,
        КомплектующиеНоменклатуры.Комплектующая,
        КомплектующиеНоменклатуры.Количество
    ИТОГИ
        СУММА(ИтогПоЗаказу)
    ПО
        Комплектующая



    Вопрос: можно ли как-то из запроса вытащить Сумма(ИтогПоЗаказу) по каждой отдельно взятой Комплектующей? Спасибо!
  • Программирование :: Программирование 1С :: 1С 7.x
  • Народ, помогите ПРАВИЛЬНО вызвать диалог выбора элемента справочника (Метод "Выбрать()/Choose()").
    Подключаюсь к 1С методом динамического  связывания.
    Окно авторизации показывается активным (поверх окна вызывающего приложения), а диалоговое окно неактивно (под окном вызывающего), что не есть ГУД.
    Если подключаться к 1С без вызова диалога авторизации (прописать нужные параметры), то в первый раз диалог отображается правильно, а все остальные вызовы проходят как и в первом случае (в неактивном окне).
  • Программирование :: Программирование 1С :: 1С 8.x
  • С появлением 8.2 и веб форм задумался на тему "Можно ли сделать интернет магазин прямо на 1С?"
    Собственно вопрос - а знает ли кто, как опубликовать базу на веб сервере так, чтобы:
    1. Не спрашивала логин/пароль
    2. Сразу же направляла на нужную и единственную форму.
  • Платформа 8.1, УТ 10.3.7.9

    ИначеЕсли (Докум.Метаданные().Имя = "РеализацияТоваровУслуг") ИЛИ (Докум.Метаданные().Имя = "РасходныйОрдерНаТовары") ИЛИ
                     (Докум.Метаданные().Имя = "ПриходныйОрдерНаТовары") ИЛИ (Докум.Метаданные().Имя = "ПоступлениеТоваровУслугВНТТ") ИЛИ
                     (Докум.Метаданные().Имя = "ПоступлениеТоваровУслуг") ИЛИ (Докум.Метаданные().Имя = "ОтчетКомиссионераОПродажах") ИЛИ
                     (Докум.Метаданные().Имя = "ВозвратТоваровПоставщикуИзНТТ") ИЛИ (Докум.Метаданные().Имя = "ВозвратТоваровПоставщику") ИЛИ
                     (Докум.Метаданные().Имя = "ВозвратТоваровОтПокупателя") Тогда
                ОбластьДанные.Параметры.ПечДок     = Докум.Контрагент;
                ОбластьДанные.Параметры.ПечСеб     = Докум.СуммаДокумента;

    Последняя строчка выводит сумму документа.
    Подскажите, как сделать, чтобы выводил цену товара. Или хотя бы к чему обратиться, что бы разобраться с этим.         
  • Вопрос на засыпку, как мне сделать так, чтобы формировался еженедельный отчет, а также ежемесячный отчет, и какие мне значения надо добавлять. Вывод еженедельных и ежемесячных результатов расчетов производится при помощи формул. Как мне привязать системный календарь к формированию отчета? Например, если закончилась неделя, то при нажатии кнопки "сформировать" выводился отчет за неделю, точно также и ежемесячно, закончился месяц календарный при нажатии на "сформировать" выводится месячный отчет.
  • Операционные системы :: Windows
  • Никто случаем не знает в 7-ке штатного средства, предоставляющего эмуляцию VT100 в какой-нибудь консоли?

    В обычном cmd и в PowerShell консолях управляющие esc-последовательности не работают.
    Режима эмуляции DOS нет, поэтому старый ANSI.SYS не включить.
    Hyperterminal начиная с Vista в системе отсутствует.

    Или считается, что в XXI веке алфавитно-цифровые терминалы никому не нужны?
  • (Путаюсь в терминах , описывающих связывание с длл, поэтому по-простому вопрос задам:)

    экзешник использует A.dll, в программе указывается

    Код:
     #pragma comment(lib,"A.lib")

    но потом, при запуске, экзешник ищет длл сначала около себя, потом в system32 (в ведь если найдёт - цепляет оттуда...)

    А как указать путь (хотя бы относительный) к длл, не используя LoadLibrary/ GetProcAddress  ?

    то есть, к примеру, жёстко из папки D:\1\DDL\
  • Произвожу обновление экзешника по следующей схеме:

    0) для корректной работы системы сервер и клиент должны иметь экзешник абсолютно одинаковый, поэтому:
    1) когда сервер запущен и
    2) клиент подключается к серверу, клиент спрашивает версию.
    3) если сервер велит обновиться, клиент скачивает с сервера по своему протоколу экзешник, сохраняет его на диск под другим именем, запускает этот новый с определённым ключом. Новый копирует себя, замещая старый клиент, и запускает обновлённый экзешник.

    Всё прекрасно работает на XP , но вот один клиент (человек) пишет, что использует Windows 2003 Server Enterprise R2 SP2 Rus , и там происходит следующая непонятность: экзешник обновляется и запускается (он точно обновился, так как версию можно посмотреть из самой программы). Однако, после закрытия программы оказывается, что экзешник старый! Запускаем - всё повторяется.
    Что может такое быть ?
  • Направления программирования :: Web
  • Стоит задача ограничить размер upload файла.
    Но по типу.
    Например, для видео - 300M, для графики - 20M.

    На php.net есть такая штука
    http://www.php.net/manual/en/features.file-upload.php#features.file-upload.post-method

    Цитировать
    Код:
    <!-- The data encoding type, enctype, MUST be specified as below -->
    <form enctype="multipart/form-data" action="__URL__" method="POST">
        <!-- MAX_FILE_SIZE must precede the file input field -->
        <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
        <!-- Name of input element determines name in $_FILES array -->
        Send this file: <input name="userfile" type="file" />
        <input type="submit" value="Send File" />
    </form>
    Но чего я понять не могу зачем предавать еще значение MAX_FILE_SIZE, ведь все равно это поле нужно контролировать upload скриптом.

    Средствами js-скрипта невозможно определить размер файла (политика безопасности такая).

    Будут какие-нибудь мысли?
    Можно конечно, js-скриптом, по типу файла изменить и само поле MAX_FILE_SIZE  и выдать alert.
    Но как-то не интересно.
  • Практические разделы :: Железо
  • Здравствуйте. Проблема в том, что в один прекрасный момент компьютер не включился. Просто стал при включении самопроизвольно перезагружаться до бесконечности. Помогла только переустановка Винды. Месяца 4 все работало замечательно. Недавно ситуация повторилась. Попыталась зайти в безопасном  режиме, при нажатии F8 ничего не произошло. Снова переустановила Винду, но на диск Д, а потом и старая загрузилась с диска С, все снова в порядке.....
    Подскажите, пожалуйста, что может быть такое?
  • Учимся программировать :: Начинающим
  • Привет)
    Для меня возможность использовать объединения - высший пилотаж. Как можно научиться этому? :)
    Скорее всего, я не до конца понимаю - как можно получить полезные данные из одного и того же набора единиц и нулей, если только интерпретировать их как разные типы?
  • Здравствуйте  это снова я, у меня такая проблема я уже выучил синтаксис языка С немного С++ основные операторы этих языков. Понял концепцию ООП но проблема в том что я не могу писать программы ну то есть как какие та маленькие на два три действия могу а большие программы не могу, я с начало не мог понять почему, пока не набрел на уроки программирования по С  и VB в частности на урок №9 и понял в чем проблема я не умею составлять словесный алгоритм программы и блок-схему, я понял, что пока я не научусь делать этого я не смогу писать программы. ПРОШУ у вас помощи, что делать для того чтобы развить умения составлять словесный алгоритм программы и потом писать блок-схему вед без этого как я уже говорил нельзя написать большую программу.
    Литература по блок-схеме у меня есть, а что такое алгоритм я понимаю это так: Алгоритм это описание действий которые приводят к решению задачи, возможно, я не правильно понимаю что такое алгоритм, в общем ПОМОГИТЕ :help:   
  • Привет!

    Есть приложение, 99% времени свой работы оно выполняет некий набор инструкций более 100 раз в секунду - такие требования к скорости.
    Это реализовано так:
    есть главный цикл, внутри которого этот самый набор инструкций - и этот цикл должен выполнятЬся не менее 100 раз в секунду.

    Наборы инструкций разные в зависимости от состояния определяющей переменной.
    В определенные моменты нужно переключать этот самый набор - например, сейчас приложение выполняет набор команд А, потом переключается на выполнение команд B - и т.д.

    Вопрос - как лучше это переключение организовать - через switch и case или через указатель на фунцию?

    Допустим:
    Код:
    enum {A, B, C} State;
    while(true)  //главный цикл приложения
    {
          switch(State)
          {
                case A: /*Инструкции А*/ break;
                case B: /*Инструкции B*/ break;
                case C: /*Инструкции C*/ break;
                default: break;
          }
    }

    Таким образом, работа приложения определяется значением перечислимой константой Sate. Цикл всегда выполяняется 100 раз в секунду - но что именно в нем выполяется - зависит от State.

    Другой вариант - указатель на функцию, каждый набор инструкций записать в тело отдельной функции с одинаковой сигнатурой - а в цикле крутить вывоз функции по указателю, а когда надо, вместо переключения State менять этот указатель.

    Как грамотнее и быстрее? Или, может, вообще другой вариант?
    Спасибо:)

    Правка: грамотный выход из цикла, естественно, есть - в примере я этого не отразил.
    Правка 2: case'ов может быть около 10 - не больше.
  • помогите пожалуйта!!!
    сможет ли залинковаться сишный файл  не содержащий ни одной функции, но в котором объявлена глобальная переменная или же он будет исключен по причине, что в нем нет ни одной функции?
    НаПример есть файл
    1.с
    Код:
    /*со следующим содержанием глобальной переменной*/
    int i;
    и есть хидер, в котором определение i
    1.h
    Код:
    /*со следующим содержанием*/
    extern int i;
    и еще куча файликов в которых используется  переменная i
    и файлик майн

    Код:
    main.c
    #include"1.h"

    void main()
    {
    i=1;
    }

Присоединяйтесь к нашему коллективу программистов, на нашем форуме всегда можно найти интересную тему для обсуждения, задать вопрос, который поставил вас в тупик, и просто отдохнуть, зайдя в раздел Общение. Приходите, располагайтесь, чувствуйте себя, как дома! :)

А теперь прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


В избранное