Разрешена ли совместимая реализация C11 для компиляции каждой функции в бесконечный цикл? - PullRequest
0 голосов
/ 17 марта 2019

Несмотря на то, что в C ++ есть прямые гарантии прогресса, я не вижу аналогичных правил в спецификации C11.

Будет ли компилятор C11, который генерировал бесконечный цикл для каждой функции, соответствовать спецификации C11?Предположим, что он выполняет всю предварительную обработку / etc как обычно;у него просто есть довольно усердный оптимизатор.

По общему признанию, это был бы довольно плохой компилятор.Тем не менее.

1 Ответ

0 голосов
/ 17 марта 2019

Правило одной программы стандарта позволяет реализациям устанавливать произвольные «пределы перевода», которые дизайнеры считают нужными, и вести себя произвольно, если они нарушаются, при условии, что для каждого предела перевода, указанного в стандарте, существует по крайней мере одна программа, котораяреализация процессов правильно.Реализация может делать все, что ей нравится, когда ей дают любую другую программу.

Кроме того, Стандарт касается только поведения программы, а не сгенерированного кода, и, следовательно, не проводит практического различия между программой, которая застревает вбесконечный цикл, который будет работать триллионы лет без каких-либо побочных эффектов до получения результата.

В общем, правильный ответ на вопрос "Позволит ли стандарт C компилятору вести себя глупо ибесполезная мода X "это" Наверное. Так? "Стандарт не предпринимает никаких усилий, чтобы запретить компиляторам делать глупости, и тот факт, что Стандарт позволял бы соответствующей реализации делать что-то, не предполагает никакого суждения о том, может ли такое поведение сделать реализацию бесполезной для некоторых (или даже всех) целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...