Здравствуйте, rg45, Вы писали:
vsb>>Да поставь define и всё, как деды писали, зачем тебе нужны эти новомодные константы, одни проблемы от них.
R>Ну вот, а говорил
, что перфекционист. Это несколько неожиданный совет от перфекциониста.
Ну правильный ответ ты уже дал, а написать что-то мне в субботу хочется )
Я думаю, что если топикстартеру не хочется забивать себе голову всеми этими связываниями и нелогичными синтаксисами, то альтернатива в виде define-а принесёт меньше неожиданностей.
Здравствуйте, LaptevVV, Вы писали:
Pzz>>И с ними надо что-то делать, на уровне линкера. Это — часть этого механизма. LVV>Спасибо. LVV>Саму схему линкования я студням рассказывал, но до такой конкретики не опускался.
Я это очень поверхностно знаю. Мне Юра Харон, известный больше в ФИДО, чем тут, по телефону рассказывал
Но меня вымораживает, если честно, что преподаватель C++ не знает таких вещей. Я C++ не знаю, сознательно прошел мимо него, а и то в курсе.
LVV>На эту тему есть неплохая книжки (и по-моему единственная) Линкеры и загрузчики (не переведена у нас — а зря).
Это — очень старая книжка. С появлением C++ появились новые проблемы, типа этой, которых раньше не было.
Вроде был советский перевод, но я на 100% не уверен.
Pzz>Но меня вымораживает, если честно, что преподаватель C++ не знает таких вещей. Я C++ не знаю, сознательно прошел мимо него, а и то в курсе.
Это одна конкретная реализация конкретной фирмы.
Тем более, я микрософт не люблю...
Если для работы понадобится — я разберусь.
Я и внутрь gcc не лазил -потребности же не было серьезной. LVV>>На эту тему есть неплохая книжки (и по-моему единственная) Линкеры и загрузчики (не переведена у нас — а зря). Pzz>Это — очень старая книжка. С появлением C++ появились новые проблемы, типа этой, которых раньше не было.
Да, я ее в конце 90-х еще с инета качал.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, vsb, Вы писали:
vsb>Я думаю, что если топикстартеру не хочется забивать себе голову всеми этими связываниями и нелогичными синтаксисами, то альтернатива в виде define-а принесёт меньше неожиданностей.
#define — не объявление константы, а подстановка символов вместо макроса.
Однажды он напишет что-то вроде
#define A 2
#define B 3
#define C A + B
и удивится, когда подставит С в выражение с операциями, у которых выше приоритет.
Здравствуйте, AleksandrN, Вы писали:
vsb>>Я думаю, что если топикстартеру не хочется забивать себе голову всеми этими связываниями и нелогичными синтаксисами, то альтернатива в виде define-а принесёт меньше неожиданностей.
AN>#define — не объявление константы, а подстановка символов вместо макроса.
AN>Однажды он напишет что-то вроде AN>
AN>#define A 2
AN>#define B 3
AN>#define C A + B
AN>
AN>и удивится, когда подставит С в выражение с операциями, у которых выше приоритет.
Шмыги, не желающие ничего изучать — должны страдать.
Но, как я помню недавние дискуссии — ему это не грозит. Он C++ уже пару недель изучает, и не нашел там ничего сложного
Здравствуйте, vsb, Вы писали:
vsb>Я думаю, что если топикстартеру не хочется забивать себе голову всеми этими связываниями и нелогичными синтаксисами, то альтернатива в виде define-а принесёт меньше неожиданностей.
Не, тут только в дальнобойщики идти. Програмирование на этом — всё .
Здравствуйте, vsb, Вы писали:
vsb>Здравствуйте, AleksandrN, Вы писали:
AN>>Однажды он напишет что-то вроде AN>>
AN>>#define A 2
AN>>#define B 3
AN>>#define C A + B
AN>>
AN>>и удивится, когда подставит С в выражение с операциями, у которых выше приоритет.
vsb>Скобки в дефайнах учат ставить сразу после того, как учат этим самым дефайнам.
Здравствуйте, vsb, Вы писали:
vsb>Скобки в дефайнах учат ставить сразу после того, как учат этим самым дефайнам.
Только это не отменяет того факта, что макросы — это просто манипуляции с текстом, которые выполняются до того, как текст программы передается компилятору. Поэтому называть макроопределение объявлением константы — это несколько неправильно — никаких констант не создается при этом.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, vsb, Вы писали:
vsb>Здравствуйте, AleksandrN, Вы писали:
AN>>Однажды он напишет что-то вроде AN>>
AN>>#define A 2
AN>>#define B 3
AN>>#define C A + B
AN>>
AN>>и удивится, когда подставит С в выражение с операциями, у которых выше приоритет.
vsb>Скобки в дефайнах учат ставить сразу после того, как учат этим самым дефайнам.
И учат ставить всегда пробелы
#define A(b) 0x123e+(b)
int x = A(1); // error: invalid suffix "+" on integer constant#define B(b) 0x123e + (b)
int y = B(1); // Работает как ожидается