LINUX.ORG.RU

История изменений

Исправление 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 является С-комитет. Вот этот тезис и есть корень проблем.