Перейти к содержанию
    

Использование [] в #define

В чужом проекте решил упорядочить разрозненные параметры, передаваемые/принимаемые по интерфейсу, в простую  и понятную форму. Параметров полтора десятка.

Вначале объявил массив volatile int parametrs[16]; и два дефайна #define MIN_NUMBER 1 и  #define MAX_NUMBER 15.

Смысл в том чтобы переписать switch/case из 15 строк в такое выражение:

if ((num<=MAX_NUMBER) && (num >=MIN_NUMBER )) parametrs[num] = value;

Так как переменные используются многократно в тексте и переписывать их не хочется. Часть описана как volatile int, часть как extern volatile int

Решил сделать переобъявления дефайнами.

#define  minimum_temp parametrs[1]

#define  maximum_temp parametrs[2]

....

#define  maxt_timer parametrs[15]

Рассчитывал, что все срастется и скомпилируется без вопросов. Но компилятор упирается. Порыскал по интернету, пока не кончился рабочий день - ответа не нашел.

По этой ссылке https://www.opennet.ru/docs/RUS/cpp/cpp-5.html утверждается: "Однако, не существует каких либо ограничений на использование квадратных или угловых скобок. Например  macro (array[x = y, x + 1]) передает макросу 'macro' два аргумента: 'array[x = y' и 'x + 1]'."

У меня нет аргументов и препроцессор должен по дейфайнам просто заменить обращение к переменным на обращение к отдельным элементам массивов простой подстановкой.

Или я что-то путаю?


 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, а вопрос то в чем? В показанных макросах криминала нет; небольшие недочеты не беру во внимание.

Разве что, MIN_NUMBER должен быть 0, а не 1. Код показывайте, что пытаетесь сделать и на что ругается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, misyachniy сказал:

Но компилятор упирается.

Это викторина и мы должны угадать, как именно? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос был в интерпретации "[]" в дефайнах. Сегодня все отладил, квадратные скобки никак не интерпретируются. То есть сам напутал. Тему можно закрыть. Всем спасибо. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может вам помогут X_Macros?

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

правда есть неудобство в читаемости кода, но надежность повышается в разы, а объем кода наоборот сокращается до нескольких строк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...