En derleyici uyarılarını ve hatalarını üreten en kısa programı yazınız.


42

Meydan okuma:

Derlendiğinde en fazla derleyici uyarıları ve hataları oluşturan çok kısa bir program yazın. Herhangi bir programlama dilinde yazılabilir.

puanlama:

Skor bu denklem ile belirlenir: errors_and_warnings_length/code_length. En yüksek puan kazanır.

Örnek:

C # programı class5 karakter uzunluğunda ve 3 uyarıyla sonuçlandı (1/5) * 3 = 0.6.

DÜZENLE:

Bazı karışıklıklar nedeniyle, programlar en az 1 karakter uzunluğunda olmalıdır. Aksi takdirde bir sonsuzluk puanı alırdı.


17
Konsepti sevdiğim halde, metriği biraz endişe verici buluyorum. Ne derleyici? Hangi ayarlar (özellikle uyarılar konusunda)? Demek istediğim gcc -Wall -pedantic, düzden çok farklı ol` gccdan farklıdır tcc, muhtemelen diğer bazı c derleyicilerinden farklıdır.
dmckee

2
Sadece Rusça veya Almanca bir derleyici edin, LONG hatası alıyorsunuz (
punto

2
Cevapları C / C ++ dışındaki dillerde görmeyi çok isterim.
Ken Bloom,

4
Eğer zorluk mümkün olduğu kadar çok farklı hatalar
üretseydi sevinirdim

3
Ahem. Aksi ülkenin puanı olacaktır tanımsız .
wizzwizz4

Yanıtlar:


94

GCC, skor 2 , 200 /36 ≈ 4.5 x 10 58

#include __FILE__
#include __FILE__

Aslında bu kodu derlemeyi bitirmedim, fakat test ve basit matematiğe dayanarak toplamda 200 #include nested too deeply hata üretmeli .

Tabii ki, program trivally genişletilebilir. Üçüncü satırı ekleme skor getirir 3 200 /54 ≈ 4.9 x 10 93 . Dört satır elde 4 , 200 /72 ≈ 3.6 x 10 118 , vb.


6
Çok akıllıca cevap. +1
Prens John Wesley

5
Çok zekice katılıyorum, ancak geri dönüşün her bir satırı için ayrı bir hata olmadığını 1 hata ("çok fazla iç içe") olarak sayardım.
Kevin,

1
@Kevin: Açıkça anlaşılacağı gibi, bu yerleştirme sınırına ulaşılabilecek her olası yol için bir kez 2²⁰⁰ kez bu hatayı üretmelidir. Her hatanın ayrıca 200 geriye dönük çizgi içermesi, çıktıyı daha da ayrıntılı hale getiriyor.
Ilmari Karonen

1
Hmm. Dün gece denediğimde, 1 hatadan sonra gcc kaybolduğunda yemin edebilirdim, ama şimdi daha fazla baskı yapıyor gibi görünüyor. İtiraz geri çekildi. Bu arada, 200 standart c mi?
Kevin,

1
@Kevin Başına gcc.gnu.org/onlinedocs/gcc-4.8.2/cpp/Implementation-limits.html : " #includeKaçak özyinelemeyi önlemek için keyfi bir şekilde iç içe geçmiş 200 seviye sınırını koyarız . Standart en az 15 gerektirir seviyeleri."
zwol

48

C, 0 karakter - Puan = (1/0) * 1 = Sonsuzluk



1 hata oluşturur:

/usr/lib/gcc/i686-pc-linux-gnu/4.7.0/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: error: ld returned 1 exit status

Not: http://ideone.com/xdoJyA


49
1/0 tanımsız, "sonsuz" değil.
Frank

3
+1 1/0 tanımsız olsa bile, belirgin bir şekilde bölünmüş sayısından daha büyük. 0 pastayı alır.
jnm2

6
@ jnm2 bundan emin değil. 1/0 tanımsızdır ve sağ taraf + sonsuzluğa yaklaşsa da, bu tanım tanımlandığı şekilde 1/0 yapmaz.
17'de

5
Alan pozitif olduğundan, söylediklerimin anlamlı olduğunu düşünüyorum. Teori eğlencelidir ama burada biraz sağduyuya ihtiyacımız olduğunu düşünüyorum. En az kod için en derleyici hatalarını hatırlayın. Sınır açıktır.
jnm2

15
1.0 / 0.0 = + INF, en azından IEEE 754'e göre :) Bu yüzden sadece hesaplamayı kayan nokta ile yapmanız gerekiyor.
Keith Randall

19

GCC, puan 5586.6 (ve gerekirse daha fazlası)

179 karakter, 1000003 uyarı / hata (kullanma -Wall)

#define E a,a,a,a,a,a,a,a,a,a
#define D E,E,E,E,E,E,E,E,E,E
#define C D,D,D,D,D,D,D,D,D,D
#define B C,C,C,C,C,C,C,C,C,C
#define A B,B,B,B,B,B,B,B,B,B
_(){A,A,A,A,A,A,A,A,A,A}

Bu, elbette keyfi olarak genişletilebilir. Örneğin, #define5 yerine 10 sn kullanıldığında ve 10 yerine 20 uzunluk “20” uzunluğunun kullanılması yaklaşık (20 ** 10) / (179 * 4) = 14301675977.65 () ;)


7
Kullanılması #define X(A) A,A,A,A,A,A,Ave X(X(X(X(X(X(A))))))çok daha hızlı kod çoğaltabilirsiniz.
ugoren

12

İki kez GCC, 86

22 karakter, 1898 hata + sistemimde uyarılar.
Daha kısa isimlerle daha uzun dosyalar seçerek bu yaklaşımın daha da geliştirilebileceğinden eminim.

#include</usr/bin/gcc>

3
/usr/bin/gdbönemli ölçüde daha büyük (5.5M vs 760K), ancak 5.6M'de /vmlinuzen iyi seçenek olabilir.
wchargin

12

HQ9 ++, 1 ((n + 29) / n sınırı)

Aşağıdaki Warning: this is not a quinekoddaki her Q için uyarı verir.

QQQQQ...Q
Warning: this is not a quine

Küçük iyidir, değil mi? Hmm ...


FWIW, bu bir şaka. Bu açık değildi.
11'de stand

10

C, .727

11 karakter, 5 hata, 3 uyarı, (1/11) * 8 = .727273

m(;){@,x}2

cc -g -Wall    er.c   -o er
er.c:1: error: expected declaration specifiers or '...' before ';' token
er.c:1: warning: return type defaults to 'int'
er.c: In function 'm':
er.c:1: error: stray '@' in program
er.c:1: error: expected expression before ',' token
er.c:1: error: 'x' undeclared (first use in this function)
er.c:1: error: (Each undeclared identifier is reported only once
er.c:1: error: for each function it appears in.)
er.c:1: warning: left-hand operand of comma expression has no effect
er.c:1: warning: control reaches end of non-void function
er.c: At top level:
er.c:1: error: expected identifier or '(' before numeric constant


5 hata, ayrıca 3 uyarı da sayıyorum
Kevin,

Sanırım haklısın. "Error:" ve "warning:" dizgilerini sayıyordum.
luser droog

5
Bence sadece farklı hataları / uyarıları sayarsak kazanırsın.
ugoren

-Werror komut satırında kullanılıyorsa, uyarılar hatalara yükseltilir. Ayrıca, hangi C derleyicisinin bildirilen hataların sayısını etkileyeceği (veya -Kullanıcı varsa, vb.) Sorgulama için komut satırı uzunluğunun "program" uzunluğunun bir parçası olarak sayılabileceğini ... Her platformdaki derleyici sürümü ayrı bir kategoridir. :-)
Dr. Rebmu

8

NASM, skor 63/40 * 2 ^ 32, 2,905 * 10 ^ 19

%rep 1<<32
%rep 1<<32
!
%endrep
%endrep

Will çıkışı c.asm:3: error: label or instruction expected at start of line2 ^ 64 kez. Yine, bu daha büyük çıkışlara kolayca genişletilebilir.


2

C ++ 98 (211 bytes) g ++ - 5 (Ubuntu 5.2.1-23ubuntu1 ~ 12.04) 5.2.1 0151031

İşlemciyi hiç kullanmadan C ++ 'da ne kadar iyi yapabileceğimi görmek istedim. Bu program, çoğu tek bir hata mesajı olan 2,139,390,572 bayt çıktı üretir.

template<int i,class S,class T>struct R{typedef R<i,typename R<i-1,S,S>::D,typename R<i-1,S,S>::D>D;};template<class S,class T>struct R<0,S,T>{typedef S D;};void f(){R<27,float,R<24,int*const*,int>::D>::D&E=4;}

me@Basement:~/src/junk$ ls -l a.C
-rw-rw-r-- 1 me me 211 Apr 27 21:44 a.C
me@Basement:~/src/junk$ g++-5 a.C -fmax-errors=1 2>a.C.errors.txt
me@Basement:~/src/junk$ ls -l a.C.errors.txt 
-rw-rw-r-- 1 me me 2139390572 Apr 27 22:01 a.C.errors.txt

Ungolfed:

template <int i, class S, class T>
struct R {
    typedef R<i, typename R<i-1,S,S>::D, typename R<i-1,S,S>::D> D;
};
template <class S, class T>
struct R<0, S, T> {
    typedef S D;
};
void f() {
    R<27, float, R<24, int*const*, int>::D>::D &E = 4;
}

Bu program, R'nin iki kopyasını içeren bir typedef D içeren özyinelemeli bir yapı şablonu R tanımlayarak çalışır. Bu, hata mesajında ​​tam olarak basılan, üssel olarak büyüyen bir tür adıyla sonuçlanır. Ne yazık ki, g ++ (1 << 31) bayttan daha uzun bir hata mesajı yazdırmaya çalışırken boğuluyor görünüyor. 2,139,390,572 bayt, sınırı aşmadan ulaşabileceğim en yakındı. Herhangi birinin özyineleme limitlerini ve parametre türlerini 27, float, 24, int*const*, sınıra daha yakın olması için ayarlayabilmesi (veya daha uzun bir hata mesajı yazdırabilecek bir derleyici bulabilmesi) merak ediyorum .

Hata mesajından alıntılar:

a.C: In function ‘void f()’:
a.C:1:208:  error:  invalid  initialization  of non-const reference of type
‘R<27, float, R<24, R<23, R<22, R<21, R<20, R<19, R<18, R<17, R<16, R<15,
R<14,  R<13, R<12, R<11, R<10, R<9, R<8, R<7, R<6, R<5, R<4, R<3, R<2, R<1,
int* const*, int* const*>, R<1, int* const*, int* const*> >, R<2, R<1, int*
const*,  int*  const*>,  R<1, int* const*, int* const*> > >, R<3, R<2, R<1,
int* const*, int* const*>, R<1, int* const*, int* const*> >, R<2, R<1, int*
const*,  int* const*>, R<1, int* const*, int* const*> > > >, R<4, R<3, R<2,
R<1, int* const*, int* const*>, R<1,
...
int*  const*,  int*  const*>  > > > > > > > > > > > > > > > > > > > > > > >
>::D& {aka R<27, R<26, R<25, R<24, R<23,  R<22,  R<21,  R<20,  R<19,  R<18,
R<17,  R<16,  R<15,  R<14, R<13, R<12, R<11, R<10, R<9, R<8, R<7, R<6, R<5,
R<4, R<3, R<2, R<1, float, float>, R<1, float, float> >, R<2,  R<1,  float,
float>,  R<1,  float, float> > >, R<3, R<2, R<1, float, float>, R<1, float,
float> >, R<2, R<1, float, float>, R<1, float, float> > > >, R<4, 
...
, R<1, float, float>, R<1, float, float> > >, R<3, R<2, R<1, float, float>,
R<1, float, float> >, R<2, R<1, float, float>, R<1, float, float> > > > > >
>  >  >  >  >  >  > > > > > > > > > > > > > > >&}’ from an rvalue of type
‘int’
    template<int    i,class   S,class   T>struct   R{typedef   R<i,typename
R<i-1,S,S>::D,typename  R<i-1,S,S>::D>D;};template<class  S,class  T>struct
R<0,S,T>{typedef                         S                         D;};void
f(){R<27,float,R<24,int*const*,int>::D>::D&E=4;}


                                                        ^
compilation terminated due to -fmax-errors=1.

2,139,390,572 bayt / 211 bayt = 10,139,291,8


Bu yüzden her zaman STLfilt kullanıyorum ... PPCG'ye Hoşgeldiniz! Bu harika bir ilk sunum!
Mego

1
Maalesef, mücadeleyi yanlış anladığım anlaşılıyor; başvuruların, bayt sayısıyla değil, hata mesajlarının sayısıyla puanlandığını gösteriyor. Açıkçası benim 1 hata girişim çok rekabetçi değil. Belki de cevabım buraya
hesaplanıyor.

-1

SmileBASIC, 1/1 = 1

A

Hatayı oluşturur Syntax Error in 0:1


SB her seferinde sadece bir hata üretir, bu yüzden gerçekten yapabileceğiniz tek cevap budur.
salyangoz_
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.