1 literówka generująca większość komunikatów o błędach z kompilacji C ++


51

Wydaje się, że proste zmiany w pliku C ++, szczególnie w szablonach, mogą generować strony błędów. Ten konkurs ma na celu przekonanie się, jaki jest największy „huk złotówki”, czyli bardziej szczegółowy komunikat o błędzie przy najmniejszej zmianie w kodzie źródłowym (dodanie 1 znaku).

Ponieważ inne języki są bardziej rozsądne, będzie to ograniczone do C ++ i gcc w wersji 4.x.

Zasady

  1. Oryginalny plik źródłowy musi zostać skompilowany z gcc 4.9.2, aby kod obiektu mógł zostać bezbłędnie.

  2. Jeden znak ASCII jest dodawany do kodu źródłowego, aby utworzyć literówkę, zwiększając rozmiar pliku o 1 bajt.

  3. Kompilator jest uruchamiany z domyślnymi opcjami. Niezbędne opcje jak -ci -std=c++11są dozwolone, opcje jak -Wallnie są.

  4. Metryka to

        number of bytes of generated error messages
        -----------------------------------------------------------------------
        (bytes of source code with typo) (length of filename passed to compiler)
    
  5. Odpowiedzi zostaną zweryfikowane za pomocą http://ideone.com/ C ++ 4.9.2.

Przykład:

Nazwa pliku to a.cpp5 bajtów.

int foo();

Kompilacja robocza

 gcc -c a.cpp

Uszkodzony kod źródłowy:

in t foo();

Niepowodzenie kompilacji

$ 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

Wynik: 64/12/5 = 1,0666

Lepsza próba: wstaw {pomiędzy parens zfoo()

$ gcc -c a.cpp |& wc -c
497

Nowy wynik: 497/12/5 = 8,283

Powodzenia!

AKTUALIZACJA

Zachęcam ludzi do ignorowania rekurencyjnej implementacji. To technicznie wygrywa, ale nie jest zgodne z duchem konkursu.

AKTUALIZACJA 2

Jak zauważyło wiele osób, konkurs byłby prawdopodobnie bardziej interesujący, gdyby wstępny procesor C nie był dozwolony. Chciałbym więc zachęcić ludzi do publikowania rozwiązań, które w ogóle nie używają poleceń procesora wstępnego. Oznacza to, że nie można w ogóle używać plików nagłówkowych, ponieważ #includejest to zabronione!

O ile używasz IDEONE do sprawdzania poprawności, możesz albo użyć wyjścia IDEONE bezpośrednio (i nazwy źródła jako prog.cpp), albo możesz uruchomić wyjście IDEONE poprzez wyszukiwanie globalne i zastąpić ( s/prog.cpp/a.cc/na przykład) i udawać, że byłeś w stanie ustaw nazwę pliku bezpośrednio.

AKTUALIZACJA 3

Jak zauważyli ludzie, Ideone jest trochę zbyt restrykcyjny, wymagający łączenia nie tylko tworzenia plików obiektowych. Ponieważ konkurs ten ma na celu wyłącznie zabawę, bądź szczery i określ, czego użyłeś, aby uzyskać swój wynik. Użyj ideone lub użyj najbardziej waniliowej wersji (wszystkie domyślne) gcc 4.9.2, jak tylko możesz. Konkurs ma na celu uświadomienie okropności komunikatów o błędach C ++.


Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu . Ewentualnie w przypadku dyskusji na temat tego, co powinno, a co nie powinno być liczone jako duplikat, przejdź do meta .
Martin Ender

Trzy problemy z używaniem ideone do sprawdzania poprawności: Wymusza nazwę pliku źródłowego na „prog.cpp”, obcina wyjście błędu kompilatora do 64kB i łączy się, dodając dodatkowe błędy. To nie będzie dobre narzędzie do sprawdzania poprawności.
Jason C,

Korzystam z GCC 4.9.2 z repozytorium Ubuntu-test Toolchain.
nneonneo

Jakie są opcje domyślne? O ile mi wiadomo, możesz skonfigurować domyślne opcje gcc w czasie kompilacji.
FUZxxl,

2
Przywołuje wspomnienia: od około 1975 roku nasz nauczyciel fizyki przeprowadzał coroczny konkurs „najwięcej błędów z 10 (
rozdanych

Odpowiedzi:


45

gcc 4.5.2, wynik: 8579.15 (lub 14367.49 dla nazwy pliku „aC”, może zaktualizować później)

Plik oryginalny, 29 bajtów, kompiluje w czystości (a.cpp):

#if 0
#include"a.cpp"
#endif

Zmodyfikowany plik, 30 bajtów:

#iff 0
#include"a.cpp"
#endif

Błędy:

$ gcc -c a.cpp 2>&1 | wc -c
1286873

Wynik:

1286873 / (30 * 5) = 8579.15

Głowa i ogon wyjścia błędu:

a.cpp:1:2: error: invalid preprocessing directive #iff
In file included from a.cpp:2:0:
a.cpp:1:2: error: invalid preprocessing directive #iff
In file included from a.cpp:2:0,
                 from a.cpp:2:
a.cpp:1:2: error: invalid preprocessing directive #iff
In file included from a.cpp:2:0,
                 from a.cpp:2,
                 from a.cpp:2:
a.cpp:1:2: error: invalid preprocessing directive #iff
In file included from a.cpp:2:0,
                 from a.cpp:2,
                 from a.cpp:2,
                 from a.cpp:2:
a.cpp:1:2: error: invalid preprocessing directive #iff
In file included from a.cpp:2:0,
                 from a.cpp:2,
                 from a.cpp:2,
                 from a.cpp:2,
                 from a.cpp:2:
a.cpp:1:2: error: invalid preprocessing directive #iff
In file included from a.cpp:2:0,
                 from a.cpp:2,
                 from a.cpp:2,
                 from a.cpp:2,
                 from a.cpp:2,
                 from a.cpp:2:

... And so on, backing out with second error after max include depth:

a.cpp:3:2: error: #endif without #if
In file included from a.cpp:2:0,
                 from a.cpp:2,
                 from a.cpp:2,
                 from a.cpp:2,
                 from a.cpp:2:
a.cpp:3:2: error: #endif without #if
In file included from a.cpp:2:0,
                 from a.cpp:2,
                 from a.cpp:2,
                 from a.cpp:2:
a.cpp:3:2: error: #endif without #if
In file included from a.cpp:2:0,
                 from a.cpp:2,
                 from a.cpp:2:
a.cpp:3:2: error: #endif without #if
In file included from a.cpp:2:0,
                 from a.cpp:2:
a.cpp:3:2: error: #endif without #if
In file included from a.cpp:2:0:
a.cpp:3:2: error: #endif without #if
a.cpp:3:2: error: #endif without #if

Uwaga:
- Jeśli .Ckończy się zaliczające się prawidłowym rozszerzeniem następnie wynik 1.206.869 / (28 * 3) = 14,367.49 .
- Jeśli zostanie dodany sugerowany przez Dennisa drugi #include, nazwa pliku „a.cpp”, wynik to 80 797,292,934 / (46 * 5) = 351 292 5278.97


2
Pytanie mówi, aby dodać znak, a nie zastąpić go.
Dennis

3
@Dennis Oh man. Mam to. Obejrzyj drugą edycję. Twój komentarz był przebłagalnym błogosławieństwem.
Jason C,

1
@JasonC Nie mogę głosować wystarczająco dużo razy.
isaacg

9
Myślę, że możesz zdobyć nieskończony wynik, jeśli dodasz sekundę #include"a.cpp".
Dennis

3
@Dennis Whoa, miło! Pozostawię odpowiedź taką, jaka jest, ponieważ nie pomyślałem o dodaniu sekundy #includena własną rękę. Jeśli chodzi o to, że jest nieskończony ... jeśli nadal działa, kiedy budzę się jutro rano, jest dla mnie wystarczająco nieskończony. Będę cię informować, ha (chociaż obecnie przesyła z prędkością 5,1 MB / s do wc, więc jeśli wcużywa 32-bitowego licznika, według moich obliczeń coś dziwnego może się wydarzyć za około 13 minut.)
Jason C

31

gcc 4.9.2, wynik: 222 898 664 663,393,783

Jest to w dużej mierze oparte na odpowiedzi @ JasonC , ale powiedział, że nie chce przypisywać sobie tej poprawy.

Dane wyjściowe błędu w poniższym kodzie mają długość 126 044,818,789 bajtów. Punktacja powinna być znacznie wyższa w teorii (i dążyć do nieskończoności wraz ze wzrostem liczby instrukcji dołączania), ale zmniejsza się w praktyce poprzez dodanie większej liczby instrukcji dołączania.

Oryginalny plik (37 bajtów)

/*#
#include"w.cpp"
#include"w.cpp"*/
$ gcc -c w.cpp
$

Zmodyfikowany plik (38 bajtów)

/
*#
#include"w.cpp"
#include"w.cpp"*/
$ gcc -c w.cpp
w.cpp:2:2: error: stray ‘#’ in program
 *#
  ^
In file included from w.cpp:3:0:
w.cpp:2:2: error: stray ‘#’ in program
 *#
  ^
In file included from w.cpp:3:0,
                 from w.cpp:3:
w.cpp:2:2: error: stray ‘#’ in program
 *#
  ^
In file included from w.cpp:3:0,
                 from w.cpp:3,
                 from w.cpp:3:
w.cpp:2:2: error: stray ‘#’ in program
 *#
  ^
In file included from w.cpp:3:0,
                 from w.cpp:3,
                 from w.cpp:3,
                 from w.cpp:3:
⋮
w.cpp:2:2: error: stray ‘#’ in program
 *#
  ^
w.cpp:3:0: error: #include nested too deeply
 #include"w.cpp"
 ^
w.cpp:4:0: warning: extra tokens at end of #include directive
 #include"w.cpp"*/
 ^
w.cpp:4:0: error: #include nested too deeply
w.cpp:2: confused by earlier errors, bailing out
The bug is not reproducible, so it is likely a hardware or OS problem.

6
Nie będzie to technicznie generować nieskończonej mocy wyjściowej , chociaż przy obecnej (lub przewidywalnej) technologii komputerowej nie przeżyjesz wystarczająco długo, aby zatrzymać. Zasadniczo GCC ma #includelimit zagnieżdżania wynoszący 200 poziomów, więc Twoje rekurencyjne #includeskutecznie stają się 200-bitowym licznikiem binarnym.
Ilmari Karonen,

3
Wystarczy dodać więcej linii dołączania, aby uzyskać nieskończony wynik. Rozmiar wyjściowy rośnie szybciej niż kod.
jimmy23013

Równie dobrze mogła być oparta na jednej z odpowiedzi z wcześniejszego pytania .
Peter Taylor,

2
To nie zakończyć tego ranka, z pewnym ogromnej liczby który rozpoczął się o 8, a ja przypadkowo zamknięte okno przed skopiowaniem liczbę , bo jestem super. Uruchomię to ponownie.
Jason C,

3
@JasonC Uruchomiłem go również i otrzymałem wynik 77 877 399,160 bajtów. To o wiele mniej nieskończone, niż się spodziewałem, więc uruchomię go ponownie z krótszą nazwą pliku.
Dennis

25

gcc, 4.9.2, wynik: 22,2

Plik oryginalny: 0 bajtów (a.cpp)

Kompiluje czyste:

$ gcc -c a.cpp |& wc -c
0

Zmodyfikowany plik:

(

Błędy:

$ gcc -c a.cpp |& wc -c
111

Wynik

111/1/5 = 22,2


4
Czy już to brutalnie wykorzystałeś? Mam na myśli, czy to najwyższy wynik dla pliku startowego 0 bajtów?
Thomas Weller,

Nie, nie brutalnie to wymusiłem. Właśnie wypróbowałem 3 lub 4 różne postacie. To była tylko podstawowa odpowiedź, aby zainteresować ludzi konkursem :)
Mark Lakata

23

11 126,95 9 105,44 2 359,37 1 644,94 266,88 punktów

Więcej nadużyć preprocesorów! Tym razem płaczemy ze standardowej biblioteki.

Bez literówki:

#define typedf
#include<fstream>

Z literówką:

#define typedef
#include<fstream>

Błędy:

In file included from /usr/include/c++/4.9/iosfwd:39:0,
                 from /usr/include/c++/4.9/ios:38,
                 from /usr/include/c++/4.9/istream:38,
                 from /usr/include/c++/4.9/fstream:38,
                 from a.C:2:
/usr/include/c++/4.9/bits/stringfwd.h:62:33: error: aggregate ‘std::basic_string<char> std::string’ has incomplete type and cannot be defined
   typedef basic_string<char>    string;   
                                 ^
/usr/include/c++/4.9/bits/stringfwd.h:68:33: error: aggregate ‘std::basic_string<wchar_t> std::wstring’ has incomplete type and cannot be defined
   typedef basic_string<wchar_t> wstring;   
                                 ^
/usr/include/c++/4.9/bits/stringfwd.h:78:34: error: aggregate ‘std::basic_string<char16_t> std::u16string’ has incomplete type and cannot be defined
   typedef basic_string<char16_t> u16string; 
                                  ^
/usr/include/c++/4.9/bits/stringfwd.h:81:34: error: aggregate ‘std::basic_string<char32_t> std::u32string’ has incomplete type and cannot be defined
   typedef basic_string<char32_t> u32string; 
                                  ^
In file included from /usr/include/wchar.h:36:0,
                 from /usr/include/c++/4.9/cwchar:44,
                 from /usr/include/c++/4.9/bits/postypes.h:40,
                 from /usr/include/c++/4.9/iosfwd:40,
                 from /usr/include/c++/4.9/ios:38,
                 from /usr/include/c++/4.9/istream:38,
                 from /usr/include/c++/4.9/fstream:38,
                 from a.C:2:
/usr/include/stdio.h:48:25: error: aggregate ‘_IO_FILE FILE’ has incomplete type and cannot be defined
 typedef struct _IO_FILE FILE;
                         ^
/usr/include/stdio.h:64:25: error: aggregate ‘_IO_FILE __FILE’ has incomplete type and cannot be defined
 typedef struct _IO_FILE __FILE;
                         ^
In file included from /usr/include/c++/4.9/cwchar:44:0,
                 from /usr/include/c++/4.9/bits/postypes.h:40,
                 from /usr/include/c++/4.9/iosfwd:40,
                 from /usr/include/c++/4.9/ios:38,
                 from /usr/include/c++/4.9/istream:38,
                 from /usr/include/c++/4.9/fstream:38,
                 from a.C:2:
/usr/include/wchar.h:106:9: error: ‘__mbstate_t’ does not name a type
 typedef __mbstate_t mbstate_t;
         ^
/usr/include/wchar.h:151:38: error: ‘size_t’ is not a type
     const wchar_t *__restrict __src, size_t __n)
                                      ^
/usr/include/wchar.h:159:38: error: ‘size_t’ is not a type
     const wchar_t *__restrict __src, size_t __n)
                                      ^
/usr/include/wchar.h:166:63: error: ‘size_t’ is not a type
 extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
                                                               ^
/usr/include/wchar.h:176:4: error: ‘size_t’ is not a type
    size_t __n) __THROW;
    ^
In file included from /usr/include/wchar.h:180:0,
                 from /usr/include/c++/4.9/cwchar:44,
                 from /usr/include/c++/4.9/bits/postypes.h:40,
                 from /usr/include/c++/4.9/iosfwd:40,
                 from /usr/include/c++/4.9/ios:38,
                 from /usr/include/c++/4.9/istream:38,
                 from /usr/include/c++/4.9/fstream:38,
                 from a.C:2:
/usr/include/xlocale.h:42:9: error: ‘__locale_t’ does not name a type
 typedef __locale_t locale_t;
         ^
In file included from /usr/include/c++/4.9/cwchar:44:0,
                 from /usr/include/c++/4.9/bits/postypes.h:40,
                 from /usr/include/c++/4.9/iosfwd:40,
                 from /usr/include/c++/4.9/ios:38,
                 from /usr/include/c++/4.9/istream:38,
                 from /usr/include/c++/4.9/fstream:38,
                 from a.C:2:
/usr/include/wchar.h:183:5: error: ‘__locale_t’ is not a type
     __locale_t __loc) __THROW;
     ^
/usr/include/wchar.h:186:6: error: ‘size_t’ is not a type
      size_t __n, __locale_t __loc) __THROW;
      ^
/usr/include/wchar.h:186:18: error: ‘__locale_t’ is not a type
      size_t __n, __locale_t __loc) __THROW;
                  ^
/usr/include/wchar.h:196:8: error: ‘size_t’ does not name a type
 extern size_t wcsxfrm (wchar_t *__restrict __s1,
        ^
/usr/include/wchar.h:207:9: error: ‘__locale_t’ is not a type
         __locale_t __loc) __THROW;
         ^
/usr/include/wchar.h:212:8: error: ‘size_t’ does not name a type
 extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2,
        ^
/usr/include/wchar.h:252:8: error: ‘size_t’ does not name a type
 extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject)
        ^
/usr/include/wchar.h:256:8: error: ‘size_t’ does not name a type
 extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept)
        ^
/usr/include/wchar.h:287:8: error: ‘size_t’ does not name a type
 extern size_t wcslen (const wchar_t *__s) __THROW __attribute_pure__;
        ^
/usr/include/wchar.h:306:8: error: ‘size_t’ does not name a type
 extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen)
        ^

[FANTASTYCZNA OKAZJA]

/usr/include/c++/4.9/bits/fstream.tcc:934:35: error: ‘cur’ is not a member of ‘std::ios_base’
    __testvalid = this->seekoff(0, ios_base::cur, _M_mode)
                                   ^
/usr/include/c++/4.9/bits/fstream.tcc:934:50: error: ‘_M_mode’ was not declared in this scope
    __testvalid = this->seekoff(0, ios_base::cur, _M_mode)
                                                  ^
/usr/include/c++/4.9/bits/fstream.tcc:941:25: error: ‘_M_state_last’ was not declared in this scope
    + _M_codecvt->length(_M_state_last, _M_ext_buf,
                         ^
/usr/include/c++/4.9/bits/fstream.tcc:944:15: error: ‘streamsize’ does not name a type
         const streamsize __remainder = _M_ext_end - _M_ext_next;
               ^
/usr/include/c++/4.9/bits/fstream.tcc:945:13: error: ‘__remainder’ was not declared in this scope
         if (__remainder)
             ^
/usr/include/c++/4.9/bits/fstream.tcc:949:35: error: ‘__remainder’ was not declared in this scope
         _M_ext_end = _M_ext_buf + __remainder;
                                   ^
/usr/include/c++/4.9/bits/fstream.tcc:951:25: error: ‘_M_state_cur’ was not declared in this scope
         _M_state_last = _M_state_cur = _M_state_beg;
                         ^
/usr/include/c++/4.9/bits/fstream.tcc:951:40: error: ‘_M_state_beg’ was not declared in this scope
         _M_state_last = _M_state_cur = _M_state_beg;
                                        ^
/usr/include/c++/4.9/bits/fstream.tcc:960:2: error: ‘_M_codecvt’ was not declared in this scope
  _M_codecvt = _M_codecvt_tmp;
  ^
/usr/include/c++/4.9/bits/fstream.tcc:960:15: error: ‘_M_codecvt_tmp’ was not declared in this scope
  _M_codecvt = _M_codecvt_tmp;
               ^
/usr/include/c++/4.9/bits/fstream.tcc:962:2: error: ‘_M_codecvt’ was not declared in this scope
  _M_codecvt = 0;
  ^

Na mojej maszynie Ubuntu g++-4.9 -std=c++11 -c a.Cgeneruje 1 1015 68 chwalebnych bajtów błędów, co daje wynik 1101568/33/3 = 11 126,95.


7
Powinieneś napisać program analizujący wszystkie standardowe nagłówki i określający, który #definedaje najwięcej punktów.
Jason C,

1
Możesz go jeszcze pogorszyć, zastępując typedefprzez t;. Teraz nie tylko przerywasz każde użycie, typedefale dostajesz również mnóstwo błędów „t nie nazywa typu”. Lub %;wygenerować „oczekiwany identyfikator niekwalifikowany przed% tokenem”.
MSalters

1
#define typename *i #define int class stdwydawało się, że generuje znacznie więcej błędów.
jimmy23013

11

62,93 punktów

Tylko trochę czarnej magii C ++, skompilowanej z g++-4.8 -c -std=c++11 a.cc:

#include<memory>
template<int n>class B:std::unique_ptr<B<n-1>>{};template<>class B<0>{};B<-1>x;

Nie golfowany:

#include <memory>

template<int n>
class B: std::unique_ptr<B<n-1>> {};

template<>
class B<0> {};

B<-1>x;

G ++ ma limit rekurencji wynoszący 900, więc zmiana B<1>na B<-1>zakres 31-bitowy ma ... interesujący efekt.

  • 96 bajtów kodu (nie licząc końcowego, \nniektóre edytory tekstu automatycznie dodają, vimnie robią).
  • 4-literowa nazwa pliku, a.cc
  • 24165 bajtów komunikatu o błędzie i jest on obcinany. Pełny komunikat o błędzie zawiera aż 1235889 bajtów treści. Wymagałoby to -ftemplate-backtrace-limit=0przełącznika. Oznaczałoby to również dla mnie 3185 punktów!

std::unique_ptr to tylko klasa szablonów, która zdoła wydać najdłuższy komunikat o błędzie, znaleziony metodą prób i błędów oraz znajomością STL oraz kotów i innych rzeczy.


2
Ale ... jak mogę pozbyć się 6 białych spacji, gdy mam tylko 3 w kodzie, @JasonC!
Stefano Sanfilippo,

7

Wynik 7,865

Ściśle mówiąc, 0-bajtowa odpowiedź NIE jest poprawna, ponieważ ideone.com odmówi skompilowania pliku bez błędu. To samo dotyczy przykładu int foo();- nie skompiluje się na ideone.com (nie mogę komentować z powodu braku reputacji ...)

Najmniejszy możliwy program do kompilacji bez żadnego #includesjest następujący:

int main(){}

Jeśli zmienisz to na następujący kod, błąd 409 bajtów kodu błędu (po zmianie nazwy prog.cpp na a.cc z danych wyjściowych ideone.com):

int main(){[}

409 / (13 * 4) = 7,865

Zaktualizuj odpowiednio pytanie, ponieważ podane przykłady nie są zgodne z podanymi zasadami ...


1
Cała ideona jest głupia.
Jason C,

Zgadzam się, wprowadziłem zasadę ideonu po opublikowaniu pytania i udzieleniu pierwszych odpowiedzi. Cat jest teraz trochę wyjęta z torby.
Mark Lakata,

1

C, nazwany jako .cc

main(){constexprs a(){*(int*)0=f;}a(0)}

Kod błędu:

.code.tio.cpp: In function ‘int main()’:
.code.tio.cpp:1:8: error: ‘constexprs’ was not declared in this scope
 main(){constexprs int a(f){*(int*)0=f;}a(0);}
        ^~~~~~~~~~
.code.tio.cpp:1:8: note: suggested alternative: ‘__cpp_constexpr’
 main(){constexprs int a(f){*(int*)0=f;}a(0);}
        ^~~~~~~~~~
        __cpp_constexpr
.code.tio.cpp:1:40: error: ‘a’ was not declared in this scope
 main(){constexprs int a(f){*(int*)0=f;}a(0);}

Witam ponownie! Jaki jest oryginalny program, który nie zawiera błędów? (Zakładam, że tak main(){}, ale nie jestem pewien). Czy to nie jest tylko poprawa powyższej odpowiedzi? Chociaż z pewnością możesz zachować tę odpowiedź, jeśli była inspirowana odpowiedzią @ StefanM, powinieneś o tym wspomnieć. Wreszcie, mając 50 powtórzeń, możesz komentować w dowolnym miejscu.
NoOneIsHere

Myślę, że to zbyt blisko odpowiedzi Stefana M.; Chciałbym opublikować to jako zalecaną poprawę tego rozwiązania. Biorąc to pod uwagę, dozwolone są duplikaty odpowiedzi. Proszę jednak umieścić oryginał tutaj i wymienić wszelkie inspiracje (choć możliwe, że wymyśliłeś to również niezależnie)
HyperNeutrino

1

Ocena 12.xx (błąd przez USUWANIE znaku)

Proszę wybaczyć złamanie Reguły 2 (dodanie przez IMHO LUB usunięcie jednej postaci byłoby zgodne z duchem tej reguły), ale stało mi się to przypadkowo (dlatego nie używa żadnych „celowo” obraźliwych sztuczek) podczas pisania Real Code (TM) - zarówno działający, jak i powodujący błędy kod są (lub wyglądają) proste i zrozumiałe, więc pomyślałem, że to wystarczająco fajne, aby dołączyć tutaj. Oryginalny kod

#include <iostream>
using namespace std;
int main ()
{
cout<<"test"<<endl;
}

Kod generujący błąd (ostatnie „<” zostało usunięte, więc wygląda na mniej niż porównanie, ale noooooooooooo ...)

#include <iostream>
using namespace std;
int main ()
{
cout<<"test"<endl;
}

To „tylko” 8241 bajtów komunikatów o błędach kompilatora w ideone.com g ++ 4.3.2.


1
Nawet jeśli wydaje się, że jest to zgodne z duchem wyzwania (ponieważ tytuł mówi „literówka z jedną postacią”), nie jest to zgodne z regułą 2, która mówi, że można tylko dodać znak, nie usuwać ani zmieniać.
Jo King
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.