Ошибки, баги, вопросы - страница 2864

fxsaber:

Скорее всего, нигде не работает такой подход. Т.к. идет такая замена, где VALUE справа не определен.

Видимо, совсем не понимаю, как работает компилятор. Представлял, что строки анализируются последовательно. Значит, нет неопределенного справа значения:

#define VALUE 10       // VALUE = 10
#define TMP VALUE      // TMP = 10
#undef VALUE           // VALUE = EMPTY
#define VALUE (TMP*2)  // TMP = 10, следовательно VALUE = 20
Andrey Khatimlianskii:

Видимо, совсем не понимаю, как работает компилятор. Представлял, что строки анализируются последовательно. Значит, нет неопределенного справа значения:

Работает сверху-вниз, как замена текста. Т.е. "TMP" будет заменен на "VALUE".

Andrey Khatimlianskii:

Видимо, совсем не понимаю, как работает компилятор. Представлял, что строки анализируются последовательно. Значит, нет неопределенного справа значения:

Это не компилятор - это препроцессор)

#define VALUE (TMP*2)

превращается в

#define VALUE (VALUE*2)

, а VALUE у тебя не определен

Не возможно создать новый продукт для маркета, пишет ошибка 500.

Продукт создан прошел проверки, в ЛК пишет опубликован, но когда переходишь по ссылке получаешь ответ 500.

fxsaber:

Работает сверху-вниз, как замена текста. Т.е. "TMP" будет заменен на "VALUE".

Vladimir Simakov:

Это не компилятор - это препроцессор)

превращается в

, а VALUE у тебя не определен

А как должен работать undef?

Andrey Khatimlianskii:

А как должен работать undef?

До этого места идет "замена текста".

Vladimir Simakov:

Это не компилятор - это препроцессор)

превращается в

, а VALUE у тебя не определен

#define VALUE (VALUE*2)

Я правильно понимаю, тип значения VALUE*2 - const и привязан к самой подстановке, т.е. и VALUE тоже константа. Компилятор создает две константы.

Если так, то наверное создавая новую подстановку 

#define VALUE1 (VALUE*2)
#define VALUE VALUE1

И то не корректно, если VALUE выше по коду была определена константой.

fxsaber:

До этого места идет "замена текста".

Не сходится, меняет TMP на VALUE в строке "#define VALUE (TMP*2)", которая после.

Andrey Khatimlianskii:

Не сходится, меняет TMP на VALUE в строке "#define VALUE (TMP*2)", которая после.

#define MACROS TEXT
 // В этом интервале везде идет замена в исходнике MACROS на TEXT, как делалось бы в текстовом редакторе.
#undef MACROS
И так идут замены до тех пор, пока все на закончатся.
fxsaber:
И так идут замены до тех пор, пока все на закончатся.

Есть код:

#define VALUE 10       // 
#define TMP VALUE      // 
#undef VALUE           // 
#define VALUE (TMP*2)  // 

Первая подстановка меняет VALUE на 10 по всему коду до #undef VALUE, остается вот такое:

#define TMP 10
#define VALUE (TMP*2)

Следующая подстановка меняет TMP на 10. Получается

#define VALUE (10*2)

Где я туплю?