powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / препроцессор С, почему нельзя написать так?
5 сообщений из 5, страница 1 из 1
препроцессор С, почему нельзя написать так?
    #39223773
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно найти решение для С, не для С++ (есть template)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#define _muFunc(p, arg) (func##p(arg))

#define myFunc(p, arg) { \
#if defined(func##p)       \
_myFunc(p, arg);            \
#elif                             \
defaultFunc(p,arg);         \
#endif              
}



Смысл в том, чтобы определить макрос, который будет создавать или вызов имеющейся макро-функции, конкатенируя текст или вызывать обобщенную функцию, передавая аргумент макроса как параметр в зависимости от того, что получил?

В системе есть кучка макросов, резко упрощающих код (примерно в 10 раз), которые писаны со своим номером .. таких 6 типов *100 шт., но сам номер может быть как константой (и они отлично работают), так и передаваться в переменной (и вот тут наступает засада при конкатенации имени переменной в название макроса)..

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

Можно так или нет? А хоть как-то можно?
...
Рейтинг: 0 / 0
препроцессор С, почему нельзя написать так?
    #39223782
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясню.
Код: plaintext
1.
2.
X = muFunc(12, 45); // должно замениться на X = func12(45);
X = muFunc(abc, 45); // должно замениться на X = defaultFunc(abc, 45);



Можно такое сделать средствами препроцессора языка "С" или нет?
...
Рейтинг: 0 / 0
препроцессор С, почему нельзя написать так?
    #39223840
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Вы же год назад уже спрашивали это.

Думаете, с тех пор в С появились новые возможности? )))
...
Рейтинг: 0 / 0
препроцессор С, почему нельзя написать так?
    #39223977
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, спасибо, забыл уже что спрашивал. Как понял условного разворачивания макрофункций - нет никакого способа. То есть сделать "template" средствами языка С - в общем-то и нельзя. Жаль.

Спасибо, что нашли предыдущий вопрос .. тут несколька иная тема, но пересекается "один в один". Там я тоже не нашел удовлетворительного решения.
...
Рейтинг: 0 / 0
препроцессор С, почему нельзя написать так?
    #39224058
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Дубль. Закрыто.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / препроцессор С, почему нельзя написать так?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]