реклама на сайте
подробности

 
 
> Макропрограммирование в С под АРМ
kochkuroff
сообщение Oct 8 2008, 04:46
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 27-10-04
Пользователь №: 990



Столкнулся с такой задачей - нужно реализовать в С макрос в котором будет объявляться переменная для хранения промежуточных данных. Причем переменная не должна умирать после завершения кода макроса, чтобы в последующем цикле макрос мог взять из нее данные. Мало того, этот макрос будет встречаться в коде сотни раз и в каждом месте он должен создавать свою переменную. Т.е. когда макрос встречается в коде первый раз, он должен создавать переменную VAR0001 , второй раз VAR0002 и т.д. Если переменная уже создана, т.е. макрос в этом месте выполняется повторно, то ее описание должно игнорироваться. В VisualDSP это реализуется автоматически, но как реализовать этот кошмар в С ??? Нужно перевести код с АДСП на АРМ. Код генерится автоматически с помощью специальной программы из макросов
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kochkuroff
сообщение Oct 8 2008, 09:14
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 27-10-04
Пользователь №: 990



Цитата
Что, на макросах свет клином сошёлся?


В данном случае да. Без макросов реализовать это не выйдет по той причине, что программа генерирующая код из макросов написана очень давно, лет 10 назад.

На другом форуме предложили следующее:

Код
#define макро {static tmp;...}
макро;
....
макро;

преобразуется препроцессором в:

{static tmp;...}
....
{static tmp;...}

этот код и уйдёт в компилятор.
На каждое появление в коде конструкции {static tmp;...} будет выделена отдельная переменная tmp, которая будет создана и проинициализирована только один раз, и будет существовать и хранить значения до окончания работы программы. Каждая переменная tmp будет видима только внтури своих скобок {}
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 8 2008, 09:22
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(kochkuroff @ Oct 8 2008, 11:14) *
На другом форуме предложили следующее:

Совершенно очевидное решение, если вопросы правильно задавать и границы отступления (поскольку это не полностью реализует описанное в первом посте) от желаемого указывать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 04:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016