Не проще писать _MY_C_STRING_CIPHER_ ("very_long_string") и искать токен _MY_C_STRING_CIPHER_ регуляркой?
J0E во-первых это неудобно во-вторых всеравно надо разруливать комментарии Код (Text): /* ................. ................ _MY_C_STRING_CIPHER_ ("very_long_string") .............. ............... */
но вместо парсера можно регулярками обрабатывать строки, и искать открытие\закрытие многострочного комментария
Может просто ненадо называть функцию "_MY_C_STRING_CIPHER_" если она есть в комментариях или просто не писать эту последовательность символов в комментариях) А вообще проблема то решится введением отдельного *.h файла для строк с жёстким форматом(никаких комментариев, ничего постороннего, в каждой строке файла ровно одно определение). Это раз и навсегда решит проблему парсера всего кода для поиска строк )
Удобнее искать токен, чем парсить грамматику С++. Мыслим шире: L"very_long_string" X"very_long_string". Зачем, они не влияют на генерируемый код )
что-то забыл про эту тему... как вам такой вариант: Код (Text): #define CRYPT8(str) { CRYPT8_(str "\0\0\0\0\0\0\0\0") } #define CRYPT8_(str) (str)[0] + 1, (str)[1] + 2, (str)[2] + 3, (str)[3] + 4, (str)[4] + 5, (str)[5] + 6, (str)[6] + 7, (str)[7] + 8, '\0' // Вызов const char str[] = CRYPT8("ntdll"); в результате в бинарнике получаем "закриптованную" строку... в принципе довольно сносно, но есть одно но... можно ли как-нибудь определить длину строки и обрывать определение массива? есть ещё такой вариант: Код (Text): #define _TOSTR(x) #x #define _TOARR(a, b, c, d, e) _TOSTR(a ## b ## c ## d ## e) #define CRYPT5(a, b, c, d, e) _TOARR(_C##a,_C##b,_C##c,_C##d,_C##e,_C##f) // Вызов const char str[] = CRYPT5(n, t, d, l, l); (_Cx - таблица замены символов, где x - заменяемый символ) но тоже не совсем хороший вариант... не подскажите, можно ли как то здесь _VA_ARGS_ использовать для определения числа параметров?
Мне думается, что всетаки лучше писать свой язык или надстройку к языку. Хотя та же надстройка сильно затруднит работу с ИДЕ и отладку. Впрочем макросы тоже.
GoldFinch Написать свой язык - это отдельная большая задача. Проще, как говорит kaspersky, написать "тупую программу" для решения конкретной задачи. Хотя, если выбрать вариант создания языка и не жалеть на него сил и времени... но это уже из области мечтаний
да понятно... просто макросы канеш не предназначены для полноценной работы со строками))) видимо два варианта мной предложенный - максимум... к сожалению динамику определения длины строки прикрутить не возможно (если возможно, то скажите мне как)... вообще я начинаю подумывать о том, чтобы запихнуть строковые переменные в отдельную секцию и зашифровать эту секцию какой-нить тулзой... компилятор студии такого не умеет?))) как грамотно реализовать это, если делать самому?
> вообще я начинаю подумывать о том, чтобы запихнуть строковые переменные в отдельную секцию и зашифровать эту секцию какой-нить тулзой... #pragma data_seg
не... как сделать отдельную секцию я знаю... я про шифрование этой секции имел ввиду... как лучше сделать...