Говорят, что бесконечный цикл for(;;);
- это неопределенное поведение.Бесконечный цикл все еще неопределенного поведения в C++, если он вызывает общую библиотеку?
От http://en.cppreference.com/w/cpp/language/memory_model
В действующей программе C++, каждый поток в конечном итоге делает один из следующее:
- прекратить
- делает вызов в библиотеку ввода/вывода функция
- считывает или изменяет изменчивый объект
- выполняет атомную операцию или операцию синхронизации
Нет поток исполнения не может выполнять навсегда без выполнения какого-либо из этих наблюдаемых форм поведение.
Обратите внимание, что это означает, что программа с бесконечной рекурсией или бесконечным циклом (независимо от того, реализована ли она как for-statement или looping goto или в противном случае) имеет неопределенное поведение.
Но что, если она вызывает функцию в общей библиотеке?
for(;;) sofunc();
Функция может сделать любой вид блокировки ввода-вывода, или исключение/бросок.
В этом случае компилятор предполагает, что цикл имеет некоторые наблюдаемые поведения?
Если 'sofunc' не выполняет одну из указанных операций, у вас есть недействительная программа. – Jarod42
Я не знаю каких-либо компиляторов, ОС или ЦП, которые вызывают какие-либо проблемы, используя либо пустой цикл, либо завершающий цикл, который вызывает функцию. вне стандартного мира этот вопрос смешон. У меня нет претензий к OP, я просто думаю, что это не настоящая проблема. –
Но не вызывает ли атомную инструкцию? – Logman