อักขระ 1 ตัวที่สร้างข้อความผิดพลาดส่วนใหญ่จากการคอมไพล์ C ++


51

ดูเหมือนว่าการเปลี่ยนแปลงอย่างง่าย ๆ ในไฟล์ C ++ โดยเฉพาะกับเทมเพลตสามารถสร้างหน้าของข้อผิดพลาดได้ การประกวดครั้งนี้คือการดูว่า "ปังของเจ้าชู้" ที่ใหญ่ที่สุดคืออะไรนั่นคือข้อผิดพลาดที่ละเอียดมากขึ้นด้วยการเปลี่ยนแปลงที่เล็กที่สุดในรหัสที่มา (การเพิ่ม 1 ตัวอักษร)

เนื่องจากภาษาอื่นมีสติมากกว่านี้จึง จำกัด เฉพาะ C ++ และ gcc เวอร์ชัน 4.x

กฎระเบียบ

  1. ไฟล์ต้นฉบับต้นฉบับจะต้องรวบรวมกับ gcc 4.9.2 ไปยังรหัสวัตถุโดยไม่มีข้อผิดพลาด

  2. เพิ่มหนึ่งอักขระ ASCII ในซอร์สโค้ดเพื่อสร้างการพิมพ์ที่ผิดพลาดเพิ่มขนาดไฟล์ทีละ 1 ไบต์

  3. คอมไพเลอร์ทำงานด้วยตัวเลือกเริ่มต้น ตัวเลือกที่จำเป็นเช่น-cและ-std=c++11ได้รับอนุญาตตัวเลือก-Wallไม่ได้

  4. ตัวชี้วัดคือ

        number of bytes of generated error messages
        -----------------------------------------------------------------------
        (bytes of source code with typo) (length of filename passed to compiler)
    
  5. คำตอบจะได้รับการตรวจสอบกับ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

ดีกว่าความพยายาม: แทรก{ระหว่าง parens ของfoo()

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

คะแนนใหม่: 497/12/5 = 8.283

โชคดี!

UPDATE

ฉันแนะนำให้คนเพิกเฉยต่อการนำไปใช้ซ้ำ เทคนิคนั้นชนะ แต่ไม่ได้อยู่ในจิตวิญญาณของการแข่งขัน

อัพเดท 2

ดังที่หลาย ๆ คนตั้งข้อสังเกตการประกวดอาจจะน่าสนใจมากขึ้นถ้าตัวประมวลผลล่วงหน้า C ไม่ได้รับอนุญาต ดังนั้นฉันอยากจะสนับสนุนให้คนโพสต์โซลูชั่นที่ไม่ได้ใช้คำสั่ง pre-processor เลย นั่นหมายความว่าไม่มีการใช้งานไฟล์ส่วนหัวใด ๆ เลยเนื่องจาก#includeไม่ได้รับอนุญาต!

เท่าที่ใช้ IDEONE เพื่อตรวจสอบความถูกต้องคุณจะได้รับอนุญาตให้ใช้เอาต์พุต IDEONE โดยตรง (และชื่อแหล่งที่มาprog.cpp) หรือคุณสามารถเรียกใช้เอาต์พุต IDEONE ผ่านการค้นหาทั่วโลกและแทนที่ ( s/prog.cpp/a.cc/ตัวอย่าง) และแกล้งทำเป็นว่าคุณสามารถ ตั้งชื่อไฟล์โดยตรง

อัพเดท 3

ในขณะที่ผู้คนชี้ให้เห็นว่า Ideone มีข้อ จำกัด น้อยเกินไปต้องการการเชื่อมโยงไม่ใช่แค่การสร้างไฟล์วัตถุ เนื่องจากการประกวดครั้งนี้เป็นชื่อของความสนุกโปรดซื่อสัตย์และระบุสิ่งที่คุณเคยได้รับคะแนนของคุณ ใช้ ideone หรือใช้วานิลลาบิลด์ (ค่าเริ่มต้นทั้งหมด) ของ gcc 4.9.2 ตามที่คุณสามารถรวบรวมได้ การประกวดครั้งนี้มีวัตถุประสงค์เพื่อสร้างความตระหนักถึงความผิดพลาดของข้อความ C ++


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท อีกทางเลือกหนึ่งสำหรับการอภิปรายเกี่ยวกับสิ่งที่ควรหรือไม่ควรนับเป็นซ้ำโปรดใช้เวลาการอภิปรายในการเมตา
Martin Ender

ปัญหาสามประการเกี่ยวกับการใช้ ideone เพื่อตรวจสอบความถูกต้อง: มันบังคับให้ชื่อไฟล์ต้นฉบับเป็น "prog.cpp" จะตัดทอนข้อผิดพลาดของคอมไพเลอร์เอาท์พุทเป็น 64kB และเชื่อมโยงเพิ่มข้อผิดพลาดพิเศษ ดังนั้นมันจะไม่เป็นเครื่องมือตรวจสอบที่ดี
Jason C

ฉันใช้ GCC 4.9.2 จาก toolchain-test Ubuntu repo
nneonneo

อะไรคือตัวเลือกเริ่มต้น? เท่าที่ฉันรู้คุณสามารถกำหนดค่าตัวเลือกเริ่มต้นของ gcc ในเวลารวบรวม
FUZxxl

2
นำความทรงจำย้อนกลับมา: ประมาณปี 1975 อาจารย์ฟิสิกส์ของเราได้ทำการแข่งขัน "ข้อผิดพลาดมากที่สุดจากการแข่งขัน 10 ครั้ง (มือ) ของ Fortran" ...
TripeHound

คำตอบ:


45

gcc 4.5.2, คะแนน: 8579.15 (หรือ14367.49สำหรับชื่อไฟล์ "aC" อาจอัปเดตภายหลัง)

ไฟล์ต้นฉบับ, 29 ไบต์, คอมไพล์ไฟล์ clean (a.cpp):

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

ไฟล์ที่แก้ไข 30 ไบต์:

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

ข้อผิดพลาด:

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

คะแนน:

1286873 / (30 * 5) = 8579.15

หัวและหางของข้อผิดพลาดเอาท์พุท:

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

หมายเหตุ:
- หาก.Cได้รับการรับรองว่าเป็นส่วนขยายที่ถูกต้องคะแนนจะเท่ากับ 1,206,869 / (28 * 3) = 14,367.49
- หากเพิ่ม #include ที่สองที่แนะนำของ Dennis ชื่อไฟล์ "a.cpp" จะได้คะแนน 80,797,292,934 / (46 * 5) = 351,292,578.97


2
คำถามบอกว่าจะเพิ่มตัวละครไม่ใช่เพื่อแทนที่มัน
Dennis

3
@ เดนนิสโอ้มนุษย์ ฉันได้รับสิ่งนี้ ดูการแก้ไขที่สองนี้ ความคิดเห็นของคุณเป็นพรในการปลอมตัว
Jason C

1
@ JasonC ฉันไม่สามารถลงคะแนนได้ในเวลานี้
isaacg

9
#include"a.cpp"ฉันคิดว่าคุณสามารถเรียกร้องคะแนนอนันต์ถ้าคุณเพิ่มเป็นครั้งที่สอง
Dennis

3
@Dennis Whoa ดี! ฉันจะปล่อยให้คำตอบตามที่เป็น - เพราะฉันไม่คิดว่าจะเพิ่มวินาที#includeด้วยตัวเอง สำหรับเรื่องนี้มันไม่มีที่สิ้นสุด ... ถ้ามันยังคงทำงานอยู่เมื่อฉันตื่นเช้าวันพรุ่งนี้มันก็ไม่มีที่สิ้นสุดสำหรับฉัน จะทำให้คุณโพสต์ฮ่า (แม้ว่าขณะนี้มันกำลังไพพ์ 5.1MB / วินาทีไปwcดังนั้นถ้าwcใช้ตัวนับ 32 บิตโดยการคำนวณของฉันมีบางอย่างแปลก ๆ อาจเกิดขึ้นในเวลาประมาณ 13 นาที)
Jason C

31

gcc 4.9.2 คะแนน: 222,898,664 663,393,783

สิ่งนี้ขึ้นอยู่กับคำตอบของ @ JasonCเป็นอย่างมากแต่เขาบอกว่าเขาไม่ต้องการเครดิตสำหรับการปรับปรุงนี้

ผลลัพธ์ข้อผิดพลาดของรหัสด้านล่างนี้มีความยาว 126,044,818,789 ไบต์ คะแนนควรสูงกว่าในทางทฤษฎีมาก (และมีแนวโน้มที่จะไม่มีที่สิ้นสุดเมื่อจำนวนของงบรวมเพิ่มขึ้น) แต่มันลดลงในทางปฏิบัติโดยการเพิ่มข้อความเพิ่มเติมรวม

ไฟล์ต้นฉบับ (37 ไบต์)

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

ไฟล์ที่แก้ไข (38 ไบต์)

/
*#
#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
วิธีนี้จะไม่สร้างผลลัพธ์ที่ไม่มีที่สิ้นสุดแม้ว่าด้วยเทคโนโลยีคอมพิวเตอร์ปัจจุบัน (หรือที่คาดการณ์ได้) คุณจะอยู่ได้ไม่นานพอที่จะเห็นมันหยุด โดยทั่วไป GCC มี#includeขีด จำกัด การซ้อน 200 ระดับดังนั้นการเรียกซ้ำของคุณจึง#includeกลายเป็นตัวนับไบนารี 200 บิตได้อย่างมีประสิทธิภาพ
Ilmari Karonen

3
เพียงเพิ่มบรรทัดรวมเพิ่มเติมเพื่อรับคะแนนอนันต์ ขนาดเอาต์พุตเติบโตเร็วกว่าโค้ด
jimmy23013

มันอาจจะเท่าเทียมกันได้รับขึ้นอยู่กับหนึ่งในคำตอบจากคำถามก่อนหน้า
ปีเตอร์เทย์เลอร์

2
มันไม่เสร็จสิ้นในเช้าวันนี้มีบางส่วนจำนวนมากที่เริ่มต้นด้วย 8, และฉันตั้งใจปิดหน้าต่างก่อนการคัดลอกหมายเลขเพราะฉันน่ากลัว ฉันทำงานอีกครั้ง
Jason C

3
@ JasonC ฉันก็วิ่งไปเหมือนกันและได้ผลลัพธ์ด้วย 77,877,399,160 ไบต์ นั่นน้อยกว่าที่ฉันคาดไว้มากดังนั้นฉันจะเรียกใช้อีกครั้งด้วยชื่อไฟล์ที่สั้นกว่า
Dennis

25

gcc, 4.9.2, คะแนน: 22.2

ไฟล์ต้นฉบับ: 0 ไบต์ (a.cpp)

รวบรวมทำความสะอาด:

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

ไฟล์ที่แก้ไข:

(

ข้อผิดพลาด:

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

คะแนน

111/1/5 = 22.2


4
คุณดุร้ายกับสิ่งนี้หรือไม่? ฉันหมายถึงนี่เป็นคะแนนสูงสุดสำหรับไฟล์เริ่มต้น 0 ไบต์หรือไม่
Thomas Weller

ไม่ฉันไม่ได้ดุร้ายกับเรื่องนี้ ฉันลองตัวละครที่แตกต่างกัน 3 หรือ 4 ตัว นี่เป็นเพียงคำตอบสำหรับผู้ที่สนใจในการแข่งขัน :)
Mark Lakata

23

11,126.95 9,105.44 2,359.37 1,645.94 266.88คะแนน

การละเมิดผู้ประมวลผลล่วงหน้าเพิ่มเติม! เวลานี้เรากำลังทำให้ห้องสมุดมาตรฐานร้องไห้

โดยไม่พิมพ์ผิด:

#define typedf
#include<fstream>

ด้วยการพิมพ์ผิด:

#define typedef
#include<fstream>

ข้อผิดพลาด:

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)
        ^

[SNIP]

/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;
  ^

บนเครื่องอูบุนตูของฉันg++-4.9 -std=c++11 -c a.Cสร้างข้อผิดพลาดไบต์อันรุ่งโรจน์ 1,101,568 คะแนนให้คะแนน 1101568/33/3 = 11,126.95


7
คุณควรเขียนโปรแกรมเพื่อวิเคราะห์ส่วนหัว std ทั้งหมดและตรวจสอบว่าส่วนใด#defineให้คะแนนมากที่สุด
Jason C

1
คุณสามารถเลวลงได้ต่อไปโดยการแทนที่โดยtypedef t;ตอนนี้คุณไม่เพียง แต่ทำลายการใช้งานทุกครั้งtypedefแต่คุณจะได้รับข้อผิดพลาด "t ไม่ได้ตั้งชื่อประเภท" ด้วย หรือ%;เพื่อผลิต "รหัสที่ไม่มีเงื่อนไขที่คาดไว้ก่อนหน้า% token"
MSalters

1
#define typename *และ#define int class stdดูเหมือนว่าจะสร้างข้อผิดพลาดอีกมากมาย
jimmy23013

11

62.93 คะแนน

เพียงแค่มนต์ดำ C ++ เมตาบางส่วนที่คอมไพล์ด้วย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;

Ungolfed:

#include <memory>

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

template<>
class B<0> {};

B<-1>x;

G ++ มีขีด จำกัด recursion 900 ดังนั้นการเปลี่ยนแปลงB<1>ไปB<-1>กับช่วงวันที่ 31 บิตมีผลที่น่าสนใจ ...

  • โค้ดขนาด 96 ไบต์ (ไม่นับ\nตัวแก้ไขข้อความสุดท้ายบางอันเพิ่มโดยอัตโนมัติvimไม่ใช่)
  • ชื่อไฟล์ 4 ตัวอักษร a.cc
  • 24165 ไบต์ของข้อความแสดงข้อผิดพลาดและถูกตัดทอน ข้อความแสดงข้อผิดพลาดแบบเต็มมีเนื้อหาจำนวน 1235889 ไบต์ มันจะต้องมี-ftemplate-backtrace-limit=0สวิตช์ มันจะหมายถึง 3185 คะแนนสำหรับฉัน!

std::unique_ptr เป็นเพียงคลาสเทมเพลตที่จัดการเพื่อปล่อยข้อความแสดงข้อผิดพลาดที่ยาวที่สุดที่พบโดยการทดลองและข้อผิดพลาดและความรู้เกี่ยวกับ STL และแมวและสิ่งของ


2
แต่ ... ฉันจะกำจัดช่องว่าง 6 ช่องได้อย่างไรเมื่อฉันมีเพียง 3 รหัสเท่านั้น @JasonC!
Stefano Sanfilippo

7

คะแนน 7.865

การพูดอย่างเคร่งครัด 0-byte-Answer นั้นไม่ถูกต้องเนื่องจาก ideone.com จะปฏิเสธที่จะรวบรวมไฟล์โดยไม่มีข้อผิดพลาด เช่นเดียวกับตัวอย่างint foo();- มันจะไม่รวบรวมบน ideone.com (ฉันไม่สามารถแสดงความคิดเห็นเนื่องจากขาดชื่อเสียง ... )

ดังนั้นโปรแกรมที่เล็กที่สุดในการคอมไพล์โดยไม่มี#includesสิ่งนี้คือ:

int main(){}

หากคุณเปลี่ยนสิ่งนี้เป็นรหัสต่อไปนี้มันจะล้มเหลวด้วย 409 ไบต์ของรหัสข้อผิดพลาด (หลังจากเปลี่ยนชื่อ prog.cpp เป็น a.cc จากผลลัพธ์ ideone.com):

int main(){[}

409 / (13 * 4) = 7.865

โปรดอัปเดตคำถามตามลำดับเนื่องจากตัวอย่างที่ให้มาไม่เคารพกฎที่กำหนด ...


1
สิ่งที่เป็นอุดมคติทั้งหมดคือความโง่ทุกชนิด
Jason C

ฉันเห็นด้วยฉันยึดติดกับกฎ ideone หลังจากคำถามถูกโพสต์และคำตอบแรกที่ได้รับ แมวออกมาจากกระเป๋าทันที
Mark Lakata

1

C ชื่อ .cc

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

รหัสข้อผิดพลาด:

.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);}

สวัสดีอีกครั้ง! โปรแกรมต้นฉบับที่ไม่มีข้อผิดพลาดคืออะไร (ฉันถือว่ามันเป็นmain(){}แต่ฉันไม่แน่ใจ) นอกจากนี้นี่ไม่ใช่แค่การปรับปรุงคำตอบข้างต้นหรือไม่ ในขณะที่คุณสามารถรักษาคำตอบนี้ได้อย่างแน่นอนหากได้รับแรงบันดาลใจจากคำตอบของ @ StefanM คุณควรพูดถึงสิ่งนั้น ในที่สุดตอนนี้คุณมี 50 ตัวแทนคุณสามารถแสดงความคิดเห็นได้ทุกที่
NoOneIsHere

ฉันคิดว่ามันใกล้กับคำตอบของ Stefan M. มากเกินไป ฉันจะโพสต์สิ่งนี้เป็นการปรับปรุงที่แนะนำสำหรับการแก้ปัญหานั้น ที่ถูกกล่าวว่าอนุญาตคำตอบที่ซ้ำกัน โปรดวางต้นฉบับไว้ที่นี่และพูดถึงแรงบันดาลใจใด ๆ (แม้ว่าเป็นไปได้ว่าคุณจะได้รับสิ่งนี้ด้วยตนเองเช่นกัน)
HyperNeutrino

1

คะแนน 12.xx (ข้อผิดพลาดโดยลบอักขระ)

โปรดยกโทษให้การละเมิดกฎข้อที่ 2 (การเพิ่มหรือลบ IMHO ตัวละครตัวหนึ่งจะอยู่ในจิตวิญญาณของกฎ) แต่สิ่งนี้เกิดขึ้นกับฉันโดยไม่ตั้งใจ (ดังนั้นจะไม่ใช้เทคนิคที่ไม่เหมาะสม - ทั้งโค้ดที่ใช้งานและก่อให้เกิดข้อผิดพลาดนั้นง่ายและตรงไปตรงมาดังนั้นฉันคิดว่ามันประณีตพอที่จะรวมไว้ที่นี่ รหัสเดิม

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

โค้ดที่สร้างข้อผิดพลาด (ถูกลบ '<' ล่าสุดดังนั้นจึงดูเหมือนเป็นการเปรียบเทียบน้อยกว่า แต่ไม่มี noooooooooooo ... )

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

ข้อความข้อผิดพลาดคอมไพเลอร์ 'เท่านั้น' 8241 ไบต์ใน ideone.com g ++ 4.3.2


1
แม้ว่ามันจะอยู่ในจิตวิญญาณของความท้าทาย (เนื่องจากชื่อเรื่องมีคำว่า "ตัวละครตัวหนึ่ง") สิ่งนี้ไม่เป็นไปตามกฎที่ 2 ซึ่งบอกว่าคุณสามารถเพิ่มตัวละครได้เท่านั้นไม่ลบหรือเปลี่ยนแปลง
Jo King
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.