Страница 1 из 2

XOR препроцессором

Добавлено: 15 окт 2004, 10:54
Lepsik
есть идея написать макрос для строк, кодирующий по XOR или чем либо еще простым. В качестве маски удобно использовать имя файла или дату компиляции.

static const char *array = "привет Вася"; // вместо этого хочется :

static const char *array = __DEFINE_XOR("привет Вася", __FILE__);

в теле проги использующей данный указатель уже обычную inline функцию :

printf("%s", decode_xor(array, __FILE__) );

какие будут идеи ? у препроцессора не так уж много функциональности

Re: XOR препроцессором

Добавлено: 15 окт 2004, 12:02
temp-ii
use c++ templates, luke

Добавлено: 15 окт 2004, 13:30
Lepsik
--use c++ templates, luke

ты не понял идеи. В ресурсах должна остатся закодированная строка

Добавлено: 15 окт 2004, 15:16
vg
Lepsik писал(а):--use c++ templates, luke

ты не понял идеи. В ресурсах должна остатся закодированная строка
1) А не перепутал ли гуру ресурс с просто данными в сегменте данных приложения.
2) Возможно я не прав, но думаю, что так и останется только строка "привет вася". Это ясно и так (мне). Можешь проверить любым преобразованием в макро твою строчку. Там только "вася" и останется. Ибо макро будет разворячиваться препроцеессором в последовательность операций, а не результат этих операций. Проверь потом hexview.

ПС. Извини, если что не так сказал, ибо я сейчас всё больше с роботами, да со сваркой на заводе. Иногда молотком работаю, а не головой. :lol:

Добавлено: 15 окт 2004, 19:30
ajkj3em
Lepsik писал(а):--use c++ templates, luke

ты не понял идеи. В ресурсах должна остатся закодированная строка
это ты не понял идеи. есть такая вещь как default template arguments, static class members и template specialization. на них можно замутить чего угодно, что будет computed _in compilation time_.

ps. и, друг, используй стандартный quote mechanism форума. а то задолбал уже своими минусами

Добавлено: 16 окт 2004, 21:57
Lepsik
vg писал(а):2) Возможно я не прав, но думаю, что так и останется только строка "привет вася". Это ясно и так (мне). Можешь проверить любым преобразованием в макро твою строчку. Там только "вася" и останется. Ибо макро будет разворячиваться препроцеессором в последовательность операций, а не результат этих операций.
не буду отсылать тебя к первоисточникам.
Вот тебе простейший пример твоей неправоты

http://www.rsdn.ru/article/qna/Cpp/bin.xml

Добавлено: 16 окт 2004, 22:01
Lepsik
drain bamage писал(а):computed _in compilation time_.
это ты сам придумал ? что имено компьютед будет ?

Добавлено: 16 окт 2004, 23:10
ajkj3em
Lepsik писал(а):
drain bamage писал(а):computed _in compilation time_.
это ты сам придумал ? что имено компьютед будет ?
вот тебе пример http://www.cantrip.org/realworld.html#sqrt
дальше сам думай

Добавлено: 17 окт 2004, 06:44
vg
Lepsik писал(а):
vg писал(а):2) Возможно я не прав, но думаю, что так и останется только строка "привет вася". Это ясно и так (мне). Можешь проверить любым преобразованием в макро твою строчку. Там только "вася" и останется. Ибо макро будет разворячиваться препроцеессором в последовательность операций, а не результат этих операций.
не буду отсылать тебя к первоисточникам.
Вот тебе простейший пример твоей неправоты

http://www.rsdn.ru/article/qna/Cpp/bin.xml
1) Это другое. Я же говорил про то, что нельзя таким образом получить модифицированную строку в сегменте данных. Там всегда будет исходная строка. Не хочу спорить дальше. Если же у тебя получится хоть какое-то преобразование в compilation time - писни. Мне правда интересно.


2) Скорее всего здесь местная публика права с шаблонами.
Надо попробовать. Я бы попробовал. Не западло.

Добавлено: 18 окт 2004, 10:33
Lepsik
drain bamage писал(а):вот тебе пример http://www.cantrip.org/realworld.html#sqrt
дальше сам думай
не годится все равно в ресурс попадает

2VG
--Это другое. Я же говорил про то, что нельзя таким образом получить модифицированную строку в сегменте данных.

можно. Для этого и нужен препроцессор, которые должен менять строку до компиляции

Добавлено: 18 окт 2004, 15:52
vg
Lepsik писал(а): можно. Для этого и нужен препроцессор, которые должен менять строку до компиляции
Блин, ну ты блин задвинул. :lol: Гдеж ты его возмешь? :lol:
Лепсик, ты знаешь я тебя уважаю. Но иногда ты такое несёшь :lol:
Не умеет этого делать препроцессор - н е у м е е т. По крайней мере тот, что пользуешь ты. :lol: (И я, т.е. в ВСВ++ и МС++ :( )

Добавлено: 19 окт 2004, 11:07
Lepsik
vg писал(а):Лепсик, ты знаешь я тебя уважаю. Но иногда ты такое несёшь :lol:
Не умеет этого делать препроцессор - н е у м е е т. По крайней мере
может просто ты не знаешь ?

что делает данная строка и в каких случаях?

#if (__LINE__> ((__LINE__/2)*2) )
assert(0)
#endif

Добавлено: 19 окт 2004, 17:39
vg
может просто ты не знаешь ?
Разумеется. Где уж...
#if (__LINE__> ((__LINE__/2)*2) )
assert(0)
#endif
Это другое и не имеет отношения к результату преобразования твоей строки "просто Василий" до компиляции.

Вася! :lol:

Добавлено: 23 окт 2004, 21:14
Lepsik
один утверждает что в теплейтах вычисление делают .

да уж еще знаток С++.
ты бы уж не свистел что препроцессор макроподстановки делает.

посмотри что просхoдит в конструкции a = 2 + 3 а потом называй себя умным.

Я фигею любой "знаток" учит меня жить

Добавлено: 24 окт 2004, 06:32
vg
Lepsik писал(а):один утверждает что в теплейтах вычисление делают .

да уж еще знаток С++.
ты бы уж не свистел что препроцессор макроподстановки делает.

посмотри что просхoдит в конструкции a = 2 + 3 а потом называй себя умным.

Я фигею любой "знаток" учит меня жить
Да ты не ругайся, Лепсик :lol:
Ты вот думаешь, что будет в коде вставлено 5? А я вот сомневаюсь.
Так, что ж там будет? В ассемблерном коде?

Ред. Ты был прав - см. сл. постинг. Я несколько поспешил. Как всегда :lol: