powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Конкатенация в макросе
25 сообщений из 53, страница 1 из 3
Конкатенация в макросе
    #39919199
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу странного: объявить константу через параметр макроса, но без префикса или суффикса.
Есть какой-нибудь трюк, позволяющий конкатенацию с пробелом или ещё чем-нибудь незначимым?

Чтобы следующее работало:
Код: sql
1.
2.
3.
4.
5.
6.
7.
#define REDEFINE(X) const int ##X = X

#define ABC 2
REDEFINE(ABC);
#undef ABC

int main() { return ABC; }


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919201
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй __LINE__
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919208
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПопробуй __LINE__

Как-то не получается его на хвост нанизать. Оно тупо разворачивается в "const int
__LINE__ABC = 2;"
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919216
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там номер строки должен быть.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919229
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, я не смог донести в первом посте идею. У меня есть макрос-константа. Типа
Код: sql
1.
#define SQL_INTEGER 2


Мне хочется из него сделать
Код: sql
1.
const SQLSMALLINT SQL_INTEGER = 2;


без копипаста и search-and-replace, кодом класса
Код: sql
1.
REDEFINE(SQL_INTEGER);


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919260
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Мне хочется из него сделать

по сути ты хочешь это:
Код: plaintext
1.
const SQLSMALLINT SQL_INTEGER = SQL_INTEGER;


если
Dimitry Sibiryakov
без копипаста и search-and-replace

то хз как ещё то...
имхо, search-and-replace - best choice.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919263
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда афтор хочет "странного" - завсегдатаи нашего форума сурово сдвигают брови... :)
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919264
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухпо сути ты хочешь это:

Да. И ещё "#undef SQL_INTEGER" после этого.

Ибо макросы, в отличии от констант, не оборачиваются в неймспейсы и если две сторонние
библиотеки по их именам пересекутся - становится мучительно больно их сопрягать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919402
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отключить подстановку макроса можно только для функциональных макросов.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919429
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Похоже, я не смог донести в первом посте идею. У меня есть макрос-константа. Типа
Код: sql
1.
#define SQL_INTEGER 2


Мне хочется из него сделать
Код: sql
1.
const SQLSMALLINT SQL_INTEGER = 2;


без копипаста и search-and-replace, кодом класса
Код: sql
1.
REDEFINE(SQL_INTEGER);



Почему search-and-replace сложнее, чем search-and-insert?
найти
Код: plaintext
#define SQL_INTEGER 2
и заменить на
Код: plaintext
const SQLSMALLINT SQL_INTEGER = 2;
сложнее, чем найти то же самое и вставить после него
Код: plaintext
1.
REDEFINE(SQL_INTEGER);
#undef SQL_INTEGER
?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919433
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заголовок сторонний. Конкретно - sql.h. Вставлять строчки я могу в свою обёртку, но
трогать оригинал - нельзя, софтине ещё у других людей собираться надо. Возможно, с другими
версиями компилятора и названного заголовка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919456
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то мешает добавить свой consts.h, где прописать все:
Код: plaintext
1.
2.
const SQLSMALLINT SQL_INTEGER = SQL_INTEGER;
#undef SQL_INTEGER


...нельзя делать undef того, что будет либа юзать?
т.е. у нас тут классический трабл с легаси кодом и рефакторингом...
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919459
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухчто-то мешает добавить свой consts.h

Ничего, именно этим я сейчас и занимаюсь. Правда, писать приходится так:
Код: sql
1.
2.
#undef SQL_INTEGER
const SQLSMALLINT SQL_INTEGER = 2;


И вот эта двойка меня раздражает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919567
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня эта двойка тоже раздражает.
Чем тебя не устраивают стандартные константы?
Это такой специальный метод обфускации? Чтоб собиралось только тут, только с этими драйверами и нигде больше?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919606
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЧем тебя не устраивают стандартные константы?

Что такое "стандартные константы"?

White OwlЭто такой специальный метод обфускации? Чтоб собиралось только тут, только с этими
драйверами и нигде больше?
Это такой метод разрешить конфликт имён макросов. Чтобы собиралось хоть как-то и после
этого работало.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919613
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

White OwlЧем тебя не устраивают стандартные константы?

Что такое "стандартные константы"?Те которые определены в sql.h компанией Microsoft еще в те времена когда она только изобрела ODBC. Те которые используются всеми ODBC драйверами, потому что они все используют один и тот-же sql.h,

Dimitry Sibiryakov
Это такой метод разрешить конфликт имён макросов. Чтобы собиралось хоть как-то и после
этого работало.
А откуда взялся конфликт макросов??? В нормальной программе делается #include <sql.h> и все макросы оказываются определены один раз и на всю компиляцию. Если ты подключаешь к себе какой-то левый заголовок, то ССЗБ и вся проблема решается убиранием этого #include.

Не, я конечно могу предположить что встретился на земле идиот который написал свой собственный ODBC драйвер на основе собственного набора SQL* констант. Но неужели тебе обязательно использовать этот кривой драйвер??? Что у тебя за уникальная RDBMS что для нее есть всего один единственный драйвер, да и тот со сбитой картой типов???
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919616
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бе переформатировал вопрос. Не борьба с легаси а формирование принципов будущей разработки чтоб
таких конфликтов никогда не было.

А легаси оно так и будет. Ничего с этим не поделать.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919624
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЧто у тебя за уникальная RDBMS что для нее есть всего один единственный драйвер, да и тот
со сбитой картой типов???

"Угадай с трёх раз..."

Это, конечно же, Firebird. У которой есть ibase.h, точно так же определяющий константы с
примерно такими же именами со времен, когда ODBC не существовало в природе.

И написание утилиты, которая перекачивает данные из одного в другой, становится забавной
борьбой двух legacy. Причём оба интерфейса ещё живы и развиваются, так что тупо взять
заголовки, скопировать себе и поправить не слишком-то хороший вариант (я пробовал).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919628
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В топиках сравнений СУБД периодически появляется один господин который
рекламирует файрбёрд

https://www.sql.ru/forum/1320886/firebird-shustraya-belaya-krysa
https://www.sql.ru/forum/1307360/firebird-stremitelnyy-groznyy-kaban

Подозрвеваю что господин меняет никнеймы.

Интересно. Какова вообще перспектива ODBC? Я считал что его похоронили еще лет 10 назад.
Но как я вижу он жив.

А если его хоронят - какова альтернатива?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919630
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Это, конечно же, Firebird. У которой есть ibase.h, точно так же определяющий константы с
примерно такими же именами со времен, когда ODBC не существовало в природе.

И написание утилиты, которая перекачивает данные из одного в другой, становится забавной
борьбой двух legacy. Причём оба интерфейса ещё живы и развиваются, так что тупо взять
заголовки, скопировать себе и поправить не слишком-то хороший вариант (я пробовал).

Нууу.... FireBird это конечно птица гордая...
Но все равно не вижу проблемы.

Если ты делаешь ETL, то во первых, можно все сделать намного проще через две отдельные утилиты - одна выгружает, другая загружает. Между ними может быть что угодно - чаще всего это CSV, реже какой-нибудь собственный формат файлов, еще реже полноценный IPC...

Не хочешь две утилиты? Тогда разбей свою утилиту на три логических части - одна будет "работать" с бизнес элементами (в смысле описывать и хранить данные не в виде таблиц, а в виде классов) а две другие будут делать чисто сериализацию этих бизнес элементов в свои RDBMS. Вот эти две части просто кидаешь в подкаталоги (чтобы не путаться) и работаешь с ними по отдельности.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919635
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Какова вообще перспектива ODBC?

а куда он из колеи денется? (с)
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919636
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Интересно. Какова вообще перспектива ODBC? Я считал что его похоронили еще лет 10 назад.
Но как я вижу он жив.
Жив и будет жить еще очень-очень долго.
Просто вспомни что для MS SQL Server'а это "native" интерфейс и всяческие "более продвинутые" интерфейсы являются на самом деле обертками над ним. Так что пока MS живет как фирма - ODBC будет жить.

mayton
А если его хоронят - какова альтернатива?
Альтернатив на самом деле довольно много, практически каждая команда делавшая свою СУБД делала для нее и интерфейс исходящий из технических решений в самой СУБД. Но...
Но сегодня, все СУБД имеющие клоны сервера для Виндов имеют в стандартной поставке и ODBC драйвер. Да и для Линукса имеются клоны драйверов, хотя там чаще можно встретить другие интерфейсы. Но... к ним все равно делают ODBC обертки. Простота интерфейса в сочетании с универсальностью (как ОС так и СУБД) - эту комбинацию побить чрезвычайно сложно.

Кстати, вот еще одни вариант для TC: https://firebirdsql.org/en/odbc-driver/ и выкинуть к чертям ibase.h.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919638
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
mayton

Интересно. Какова вообще перспектива ODBC? Я считал что его похоронили еще лет 10 назад.
Но как я вижу он жив.
Жив и будет жить еще очень-очень долго.
Просто вспомни что для MS SQL Server'а это "native" интерфейс и всяческие "более продвинутые" интерфейсы являются на самом деле обертками над ним. Так что пока MS живет как фирма - ODBC будет жить.
Хм... я считал что его заменяют на ADO.Net везде где только можно.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919644
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Хм... я считал что его заменяют на ADO.Net везде где только можно.
Заменяют. В .Net языках.
Не забывай что ODBC это С интерфейс и только С и С++ могут с ним работать напрямую, все остальные языки требуют обертки. Вот для .Net такой оберткой и является ADO.Net.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919646
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в стеке технологий если сравнить ODBC/Ado что у них общее? Или есть ли какая-то
поясняющая картинка как идет современная интеграция приложений Microsoft
с MSSQL? ИЛи там какие есть best-practices. Рекомендации...
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Конкатенация в макросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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