История изменений
Исправление firkax, (текущая версия) :
spooky action at distance универсально считается чем-то плохим в программировании
Я вот плохим считаю необоснованные надписи на непонятных языках. А эта штука, чем бы она ни была, не «универсально считается» а «тобой считается», ну и ещё кем-то. Не пиши за всех. Ну и уточни по-русски что ты имел ввиду.
Гарантий того, грубо говоря, скомпилируется ли программа, и, если скомпилируется, что будет делать.
Это был риторический вопрос. Ответ на него в следующей же фразе.
Тезис: согласно стандарту
А я тебе опять повторю: отвлекись от этой графомании, в которой может быть написано что угодно, и посмотри на реальные компиляторы. Реальные компиляторы нигде не нарушают абстракцию под названием «препроцессор», а у препроцессора ключевое слово всего одно - defined
. Всё остальное для него - идентификаторы, равноправные (а если не использовать #if - то просто токены, и даже defined - уже не ключевое слово). Строчка #define int float
означает, что во всём последующем тексте токен int следует заменить на токен float, что и будет безусловно сделано.
Код, полагающийся на это, может сломаться при переходе от одной версии компилятора к другой
Почти любой код может сломаться при переходе к другой версии компилятора. Даже более того - при смене опций компиляции.
Примером может служить signed overflow.
Это как раз пример того, что компилятор надо настраивать под нужды программиста - там есть опции -fstrict-overflow, -fwrapv, описанные в мануале.
С каким их этих тезисов ты будешь спорить?
Ты неявно вплёл в них третий: авторитетным источником понятия undefined behaviour является С-комитет. Вот этот тезис и есть корень проблем.
Исправление firkax, :
spooky action at distance универсально считается чем-то плохим в программировании
Я вот плохим считаю необоснованные надписи на непонятных языках. А эта штука, чем бы она ни была, не «универсально считается» а «тобой считается», ну и ещё кем-то. Не пиши за всех. Ну и уточни по-русски что ты имел ввиду.
Гарантий того, грубо говоря, скомпилируется ли программа, и, если скомпилируется, что будет делать.
Это был риторический вопрос. Ответ на него в следующей же фразе.
Тезис: согласно стандарту
А я тебе опять повторю: отвлекись от этой графомании, в которой может быть написано что угодно, и посмотри на реальные компиляторы. Реальные компиляторы нигде не нарушают абстракцию под названием «препроцессор», а у препроцессора ключевое слово всего одно - defined
. Всё остальное для него - идентификаторы, равноправные. Строчка #define int float
означает, что во всём последующем тексте токен int следует заменить на токен float, что и будет безусловно сделано.
Код, полагающийся на это, может сломаться при переходе от одной версии компилятора к другой
Почти любой код может сломаться при переходе к другой версии компилятора. Даже более того - при смене опций компиляции.
Примером может служить signed overflow.
Это как раз пример того, что компилятор надо настраивать под нужды программиста - там есть опции -fstrict-overflow, -fwrapv, описанные в мануале.
С каким их этих тезисов ты будешь спорить?
Ты неявно вплёл в них третий: авторитетным источником понятия undefined behaviour является С-комитет. Вот этот тезис и есть корень проблем.
Исходная версия firkax, :
spooky action at distance универсально считается чем-то плохим в программировании
Я вот плохим считаю необоснованные надписи на непонятных языках. А эта штука, чем бы она ни была, не «универсально считается» а «тобой считается», ну и ещё кем-то. Не пиши за всех. Ну и уточни по-русски что ты имел ввиду.
Гарантий того, грубо говоря, скомпилируется ли программа, и, если скомпилируется, что будет делать.
Это был риторический вопрос. Ответ на него в следующей же фразе.
Тезис: согласно стандарту
А я тебе опять повторю: отвлекись от этой графомании, в которой может быть написано что угодно, и посмотри на реальные компиляторы. Реальные компиляторы нигде не нарушают абстракцию под названием «препроцессор», а у препроцессора ключевое слово всего одно - defined
. Всё остальное для него - идентификаторы, равноправные. Строчка #define int float
означает, что во всём последующем тексте токен int следует заменить на токен float, что и будет безусловно сделано.
Код, полагающийся на это, может сломаться при переходе от одной версии компилятора к другой
Почти любой код может сломаться при переходе к другой версии компилятора. Даже более того - при смене опция компиляции.
Примером может служить signed overflow.
Это как раз пример того, что компилятор надо настраивать под нужды программиста - там есть опции -fstrict-overflow, -fwrapv, описанные в мануале.
С каким их этих тезисов ты будешь спорить?
Ты неявно вплёл в них третий: авторитетным источником понятия undefined behaviour является С-комитет. Вот этот тезис и есть корень проблем.