misyachniy 0 16 октября, 2023 Опубликовано 16 октября, 2023 · Жалоба В чужом проекте решил упорядочить разрозненные параметры, передаваемые/принимаемые по интерфейсу, в простую и понятную форму. Параметров полтора десятка. Вначале объявил массив 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]'." У меня нет аргументов и препроцессор должен по дейфайнам просто заменить обращение к переменным на обращение к отдельным элементам массивов простой подстановкой. Или я что-то путаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 160 16 октября, 2023 Опубликовано 16 октября, 2023 · Жалоба Ну, а вопрос то в чем? В показанных макросах криминала нет; небольшие недочеты не беру во внимание. Разве что, MIN_NUMBER должен быть 0, а не 1. Код показывайте, что пытаетесь сделать и на что ругается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 129 16 октября, 2023 Опубликовано 16 октября, 2023 · Жалоба 3 часа назад, misyachniy сказал: Но компилятор упирается. Это викторина и мы должны угадать, как именно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 20 16 октября, 2023 Опубликовано 16 октября, 2023 · Жалоба 3 hours ago, misyachniy said: Или я что-то путаю? Однозначно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 17 октября, 2023 Опубликовано 17 октября, 2023 · Жалоба Вопрос был в интерпретации "[]" в дефайнах. Сегодня все отладил, квадратные скобки никак не интерпретируются. То есть сам напутал. Тему можно закрыть. Всем спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan. 4 18 октября, 2023 Опубликовано 18 октября, 2023 · Жалоба Может вам помогут X_Macros? с помощью них можно реализовывать перебор каких либо действий не боясь, что что-то забудется или перемешается. правда есть неудобство в читаемости кода, но надежность повышается в разы, а объем кода наоборот сокращается до нескольких строк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться