Директивы препроцессора

Anna551

Возможно ли написать программу с бесконечным временем компиляции? А с конечным, но сколь угодно большим?

Devid

Не специалист, но м.б. шаблоны?

Serab

на шаблонах-то точно можно

Devid

А с конечным, но сколь угодно большим?
Если ограничения на размер кода нет, то легко, просто увеличиваем размер кода, время компиляции растет неограниченно.
Если ограничение есть, то, очевидно, нельзя. Потому что существует только конечное число программ с размером кода меньше данного ограничения и время их компиляции либо меньше некоторой константы, либо бесконечно.

Serab

:grin: ну имеется в виду хотя бы час на килобайт, я думаю
ну или минут 10 хотя бы

Anna551

Да, про сколь угодно большое я дал маху) имеется ввиду, какова конечная достижимая плотность "время компиляции, на символ"?

vall

бесконечны цикл можно сделать инклудами, но в гцц вложенность вроде ограничена.
просто большой код легко генерируется пачкой дефайнов, у нас в одном ядерном модуле есть такая хреновина — десяток строк макросов компилируются минуту, жрут при этом несколько гигабайт памяти и генерируют полмегабайта кода. если добавить ещё несколько строк то скомпилировать уже не получается :grin:

schipuchka1

/me вспомнил, как на школьной олимпиаде кто-то скормил проверяющей системе программу на фри паскале, что она скомпилировалась в нечто размера больше 4гиг, чем обвалила проверяющую систему.

doublemother

Да, про сколь угодно большое я дал маху) имеется ввиду, какова конечная достижимая плотность "время компиляции, на символ"?
Тут ещё вопрос в ограничениях компилятора. Например, вот этот код можно было бы компилировать вечно, если бы можно было вечно увеличивать -ftemplate-depth:
#include <iostream>
template<int N> long oh_shit
{
return oh_shit<N-1> + oh_shit<N+1>
}
template<> long oh_shit<1>
{
return oh_shit<10000> - oh_shit<82000>
}
template<> long oh_shit<2000000000>
{
return oh_shit<20000> - oh_shit<7>
}
int main
{
std::cout << oh_shit<1000> << std::endl;
return 0;
}
Оставить комментарий
Имя или ник:
Комментарий: