Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Конкатенация в макросе / 25 сообщений из 53, страница 1 из 3
27.01.2020, 19:40
    #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
27.01.2020, 19:54
    #39919201
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
Попробуй __LINE__
...
Рейтинг: 0 / 0
27.01.2020, 20:25
    #39919208
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
maytonПопробуй __LINE__

Как-то не получается его на хвост нанизать. Оно тупо разворачивается в "const int
__LINE__ABC = 2;"
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.01.2020, 21:39
    #39919216
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
Там номер строки должен быть.
...
Рейтинг: 0 / 0
27.01.2020, 22:43
    #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
28.01.2020, 00:24
    #39919260
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
Dimitry Sibiryakov
Мне хочется из него сделать

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


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

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

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

Ибо макросы, в отличии от констант, не оборачиваются в неймспейсы и если две сторонние
библиотеки по их именам пересекутся - становится мучительно больно их сопрягать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.01.2020, 12:51
    #39919402
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
Отключить подстановку макроса можно только для функциональных макросов.
...
Рейтинг: 0 / 0
28.01.2020, 13:25
    #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
28.01.2020, 13:31
    #39919433
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
Заголовок сторонний. Конкретно - sql.h. Вставлять строчки я могу в свою обёртку, но
трогать оригинал - нельзя, софтине ещё у других людей собираться надо. Возможно, с другими
версиями компилятора и названного заголовка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.01.2020, 14:42
    #39919456
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
что-то мешает добавить свой consts.h, где прописать все:
Код: plaintext
1.
2.
const SQLSMALLINT SQL_INTEGER = SQL_INTEGER;
#undef SQL_INTEGER


...нельзя делать undef того, что будет либа юзать?
т.е. у нас тут классический трабл с легаси кодом и рефакторингом...
...
Рейтинг: 0 / 0
28.01.2020, 14:45
    #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
28.01.2020, 17:27
    #39919567
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
Меня эта двойка тоже раздражает.
Чем тебя не устраивают стандартные константы?
Это такой специальный метод обфускации? Чтоб собиралось только тут, только с этими драйверами и нигде больше?
...
Рейтинг: 0 / 0
28.01.2020, 18:43
    #39919606
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
White OwlЧем тебя не устраивают стандартные константы?

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

White OwlЭто такой специальный метод обфускации? Чтоб собиралось только тут, только с этими
драйверами и нигде больше?
Это такой метод разрешить конфликт имён макросов. Чтобы собиралось хоть как-то и после
этого работало.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.01.2020, 19:06
    #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
28.01.2020, 19:14
    #39919616
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
Я-бе переформатировал вопрос. Не борьба с легаси а формирование принципов будущей разработки чтоб
таких конфликтов никогда не было.

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

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

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

И написание утилиты, которая перекачивает данные из одного в другой, становится забавной
борьбой двух legacy. Причём оба интерфейса ещё живы и развиваются, так что тупо взять
заголовки, скопировать себе и поправить не слишком-то хороший вариант (я пробовал).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.01.2020, 19:32
    #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
28.01.2020, 19:41
    #39919630
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
Dimitry Sibiryakov

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

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

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

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

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

а куда он из колеи денется? (с)
...
Рейтинг: 0 / 0
28.01.2020, 19:57
    #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
28.01.2020, 20:01
    #39919638
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конкатенация в макросе
White Owl
mayton

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


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