Кажется, что простые изменения в файле C ++, особенно с шаблонами, могут генерировать страницы ошибок. Этот конкурс состоит в том, чтобы увидеть, какой самый большой «удар доллара», то есть более подробный вывод ошибок с наименьшим изменением исходного кода (добавление 1 символа).
Поскольку другие языки более разумны, это будет ограничено C ++ и gcc версии 4.x.
правила
Исходный исходный файл должен компилироваться с gcc 4.9.2 в объектный код без ошибок.
Один символ ASCII добавляется в исходный код для создания опечатки, увеличивая размер файла на 1 байт.
Компилятор запускается с параметрами по умолчанию. Необходимые опции как
-c
и-std=c++11
разрешены, опции как-Wall
нет.Метрика есть
number of bytes of generated error messages ----------------------------------------------------------------------- (bytes of source code with typo) (length of filename passed to compiler)
Ответы будут проверены с http://ideone.com/ C ++ 4.9.2.
Пример:
Имя файла составляет a.cpp
5 байтов.
int foo();
Рабочая подборка
gcc -c a.cpp
Поврежденный исходный код:
in t foo();
Неудачная компиляция
$ gcc -c a.cpp
a.cpp:1:1: error: ‘in’ does not name a type
in t foo();
^
$ gcc -c a.cpp |& -c wc
64
$ wc -c a.cpp
12 a.cpp
Оценка: 64/12/5 = 1,0666
Лучшая попытка: вставить {
между скобкамиfoo()
$ gcc -c a.cpp |& wc -c
497
Новый счет: 497/12/5 = 8,283
Удачи!
ОБНОВИТЬ
Я призываю людей игнорировать рекурсивную реализацию. Это технически выигрывает, но не в духе конкурса.
ОБНОВЛЕНИЕ 2
Как отмечали многие, конкурс, вероятно, был бы более интересным, если бы не был допущен препроцессор Си. Поэтому я хотел бы призвать людей публиковать решения, которые вообще не используют команды препроцессора. Это подразумевает, что никакие заголовочные файлы вообще не используются, поскольку #include
это запрещено!
Что касается использования IDEONE для проверки, вам разрешено либо использовать выход IDEONE напрямую (и имя источника как prog.cpp
), либо вы можете запустить вывод IDEONE через глобальный поиск и замену ( s/prog.cpp/a.cc/
например) и притворяться, что вы смогли установить имя файла напрямую.
ОБНОВЛЕНИЕ 3
Как отмечали люди, Ideone слишком ограничен и требует связывания, а не просто создания объектного файла. Поскольку этот конкурс проводится исключительно во имя веселья, пожалуйста, будьте честны и укажите, что вы использовали, чтобы получить свой счет. Либо используйте ideone, либо используйте самую ванильную сборку (все значения по умолчанию) из gcc 4.9.2, которую вы можете собрать. Конкурс призван привлечь внимание к ужасным сообщениям об ошибках C ++.
источник
Ответы:
gcc 4.5.2, оценка: 8579,15 (или 14367,49 для имени файла «aC», возможно, обновится позже)
Исходный файл, 29 байт, компилируется в чистом виде (a.cpp):
Модифицированный файл, 30 байт:
Ошибки:
Гол:
1286873 / (30 * 5) = 8579,15
Голова и хвост вывода ошибки:
Примечание:
- Если в
.C
конечном итоге квалификация в качестве действительного расширения, то оценка составляет 1 206 869 / (28 * 3) = 14 367,49.- Если добавлен второй предложенный Денисом #include, имя файла "a.cpp", оценка 80,797,292,934 / (46 * 5) = 351,292,578,97
источник
#include"a.cpp"
.#include
самостоятельно. Что касается того, чтобы быть бесконечным ... если он все еще работает, когда я просыпаюсь завтра утром, это достаточно бесконечно для меня. Будем держать вас в курсе, ха (хотя, в настоящее время он использует 5.1 МБ / сwc
, поэтому, еслиwc
используется 32-битный счетчик, по моим расчетам, через 13 минут может произойти что-то странное.)gcc 4.9.2, оценка:
222898664663393783Это в значительной степени основано на ответе @ JasonC , но он сказал, что не хочет брать кредит на это улучшение.
Ошибка вывода кода ниже составляет 126,044,818,789 байт. Оценка должна быть намного выше в теории (и стремиться к бесконечности по мере увеличения числа включаемых операторов), но на практике она уменьшается, добавляя больше включаемых операторов.
Исходный файл (37 байт)
Модифицированный файл (38 байт)
источник
#include
предел вложенности в 200 уровней, поэтому ваши рекурсивные#include
s эффективно становятся 200-битным двоичным счетчиком.gcc, 4.9.2, оценка: 22.2
Исходный файл: 0 байт (a.cpp)
Компилирует чистый:
Измененный файл:
Ошибки:
Гол
111/1/5 = 22,2
источник
11
126,959105,442359,371645,94266,88баллаБольше злоупотреблений препроцессором! На этот раз мы заставляем стандартную библиотеку плакать.
Без опечатки:
С опечаткой:
Ошибки:
[СНиП]
На моей машине с Ubuntu
g++-4.9 -std=c++11 -c a.C
генерирует 1 101 568 великолепных байтов ошибок, для оценки 1101568/33/3 = 11 126,95.источник
#define
дают вам наибольшее количество очков.typedef
наt;
. Теперь вы не только отказываетесь от каждого использования,typedef
но и получаете кучу ошибок "t not name a type". Или%;
создать "ожидаемый неквалифицированный идентификатор перед% token".#define typename *
и#define int class std
казалось, генерировать гораздо больше ошибок.62,93 балла
Просто немного мета-черной магии C ++, скомпилированной с
g++-4.8 -c -std=c++11 a.cc
:Ungolfed:
G ++ имеет предел рекурсии 900, поэтому переход
B<1>
наB<-1>
31-битный диапазон имеет ... интересный эффект.\n
некоторые текстовые редакторы автоматически добавляют,vim
нет).a.cc
-ftemplate-backtrace-limit=0
выключателя. Это также означало бы 3185 очков для меня!std::unique_ptr
это просто шаблонный класс, который может выдавать самое длинное сообщение об ошибке, найденное методом проб и ошибок и знанием STL, кошек и прочего.источник
Оценка 7,865
Строго говоря, 0-байтовый ответ НЕ верен, так как ideone.com откажется компилировать файл без ошибок. То же самое верно для примера
int foo();
- он не будет компилироваться на ideone.com (я не могу комментировать из-за отсутствия репутации ...)Таким образом, наименьшая возможная программа для компиляции без
#includes
такова:Если вы измените это на следующий код, он потерпит неудачу с 409 байтами кода ошибки (после переименования prog.cpp в a.cc из вывода ideone.com):
409 / (13 * 4) = 7,865
Пожалуйста, обновите вопрос соответствующим образом, так как приведенные примеры не соответствуют данным правилам ...
источник
С, названный как
.cc
Код ошибки:
источник
main(){}
, но я не уверен) Кроме того, не является ли это просто улучшением ответа выше? Хотя вы, конечно, можете сохранить этот ответ, если он был вдохновлен ответом @ StefanM, вы должны упомянуть об этом. Наконец, теперь, когда у вас есть 50 представителей, вы можете комментировать где угодно.Оценка 12.xx (ошибка при УДАЛЕНИИ символа)
Пожалуйста, прости за нарушение правила 2 (ИМХО добавление ИЛИ удаление одного символа было бы в духе правила), но это случилось со мной случайно (таким образом, не использует никаких «преднамеренно» оскорбительных трюков) при написании Real Code (TM) - и рабочий, и вызывающий ошибки код (или выглядят) простыми и понятными, поэтому я подумал, что это достаточно аккуратно, чтобы включить их здесь. Оригинальный код
Код, сгенерировавший ошибку (последний '<' удален, так что это выглядит как сравнение меньше, но noooooooooooo ...)
Это всего лишь 8241 байт сообщений об ошибках компилятора в ideone.com g ++ 4.3.2.
источник