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

 
 
> Целочисленные переменные в препроцессоре?
ArtemKAD
сообщение Jul 31 2013, 16:45
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Собственно сабж. Есть ли возможность в препроцессоре завести переменную которая будет меняться на этапе работы препроцессора? По сути достаточно простого инкремента для автоматической иннициализации некоторых ячеек массива.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Jul 31 2013, 19:29
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



можно использовать
__LINE__
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Aug 1 2013, 19:32
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата(KRS @ Jul 31 2013, 22:29) *
можно использовать
__LINE__

Попробовал. Даже вроде примерно то что надо...
Вот только IAR-отладчик начал вываливаться при запуске с фатальной ошибкой sad.gif ...

Цитата(scifi @ Jul 31 2013, 21:05) *
Вы лучше подробнее опишите задачу. Может быть, что-то конструктивное удастся посоветовать.

Есть диспетчер задач. К каждой задаче индекс. Индекс - уникальная константа от 0 до ... Так вот хотелось бы перестать значение индекса для каждой задачи писать вручную - когда много, можно случайно индексы продублировать.

Цитата(Непомнящий Евгений @ Aug 1 2013, 08:20) *
Можешь поиграться с boost/preprocessor

Чесно говоря не сильно понял как работает. Но насколько понял это дополнение для ++ . В чистом IAR Си оно заработает?
Go to the top of the page
 
+Quote Post
dxp
сообщение Aug 2 2013, 06:21
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (ArtemKAD @ Aug 2 2013, 02:32) *
Есть диспетчер задач. К каждой задаче индекс. Индекс - уникальная константа от 0 до ... Так вот хотелось бы перестать значение индекса для каждой задачи писать вручную - когда много, можно случайно индексы продублировать.

Можно воспользоваться свойством статических переменных. Написать функцию:
CODE
int num()
{
    static int N;
    return ++N;
}

И задавать в каждой инициализации вызов функции вместо указания значения вручную. Гарантировано будут выдаваться разные значения. Для оптимизации можно функцию определить прямо в c/cpp файле как static, тогда компилятор вообще получит возможность заменить вызовы на подстановку значений (зависит от интеллекта компилятора и степени оптимизации).


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Aug 2 2013, 14:58
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата(dxp @ Aug 2 2013, 09:21) *
Можно воспользоваться свойством статических переменных.

Переменные не подходят. Нужны именно константы. Т.е. индексы должны формироваться на этапе компиляции, а не уже при работе.

Цитата(MrYuran @ Aug 2 2013, 08:20) *
Для этого есть enum

Да, в этом что-то есть. Если получится автоматом сформировать enum, а потом его использовать в качестве индекса массивов - может оказаться наилучшим вариантом.

PS. Да, большое спасибо. Вариант с enum очень даже хорошо получился. Сильно упростил реализацию и избавил от С99 зависимости которая слегка напрягала.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:16
Рейтинг@Mail.ru


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