क्या? कोई त्रुटि नहीं? [बन्द है]


197

आपका कार्य सरल है। एक प्रोग्राम लिखें जो स्पष्ट रूप से पहली नज़र में एक त्रुटि उत्पन्न करना चाहिए जब या तो संकलित या चलाया जाता है, लेकिन या तो कुछ अन्य असंबंधित त्रुटि उत्पन्न नहीं करता है या नहीं करता है। यह एक लोकप्रियता प्रतियोगिता है, इसलिए रचनात्मक रहें।


11
हम्म्म्म .... यह एक मस्तिष्क टीज़र है। +1
टिम सेगिन

1
काश मैं इसे पा सकता ... एक पुराना पीएल / मैं उदाहरण था जिसमें "यदि हां = तो फिर = तो और फिर = अगर और फिर = ... तो" की तर्ज पर एक बयान भी शामिल था। इसके नाम चर के रूप में, और इसमें C के समान एक सशर्त अभिव्यक्ति थी ?: जिसने भी if / then / और खोजशब्दों का उपयोग किया ...)
kashlam

8
मैं पूरे दिमाग की भाषा का सुझाव देता हूं, क्योंकि बीएफ कोड ऐसा लगता है जैसे यह संकलन नहीं करेगा।
आजी हैमरथिफ

@NigelNquande केवल तभी यदि आप इससे परिचित नहीं हैं ...;)
जॉस्टी

जवाबों:


282

सी ++

सुनिश्चित करें कि आप मानक अनुरूप मोड में निम्न कोड संकलित करते हैं (उदाहरण के लिए, g ++ -ansi ध्वज का उपयोग करें):

int main()
{
  // why doesn't the following line give a type mismatch error??/
  return "success!";
}

यह काम किस प्रकार करता है:

?? / एक ट्रिग्राफ अनुक्रम है जिसे बैकस्लैश में अनुवादित किया जाता है जो निम्नलिखित नई रेखा से बच जाता है, इसलिए अगली पंक्ति अभी भी टिप्पणी का हिस्सा है और इसलिए एक वाक्यविन्यास त्रुटि उत्पन्न नहीं करेगा। ध्यान दें कि C ++ में, रिटर्न को छोड़ना mainअच्छी तरह से परिभाषित है और 0 के बराबर है, एक सफल रन का संकेत देता है।


7
मुझे लगता है कि पहले जवाब में सिर्फ इंस्टा ने जीत हासिल की।
temporary_user_name

1
यह C99 में भी मान्य है।
आर ..

1
वहाँ चेतावनी के साथ हैं
लंबा

2
@ B --овиЈ दीवार हमेशा हर चीज के बारे में चेतावनी देती है
किवी

4
@ कीवी यह केवल ऊपर की तरह कचरा कोड के लिए चेतावनी फेंकता है। -सब कुछ के लिए चेतावनी फेंक नहीं है।
B:овиЈ

86

माणिक

हमेशा इस एक के एक प्रशंसक।

x = x

नहीं NameError। x अब है nil

यह रूबी :-) का सिर्फ एक "फीचर" है

यहाँ एक और सांसारिक है जो मुझे पहले मिल गया है:

x = 42

if x < 0
  raise Exception, "no negatives please"
elseif x == 42
  raise Exception, "ah! the meaning of life"
else  
  p 'nothing to see here...'
end 

प्रिंट "यहाँ देखने के लिए कुछ भी नहीं है।"

यह है elsif , नहीं elseif । (और यह निश्चित रूप से नहीं है elif - स्वच्छंद अजगर प्रोग्रामर (मुझे) को शोक) तो करने के लिए दुभाषिया elseif एक सामान्य विधि कॉल की तरह लग रहा है, और के बाद से हम x <0 ब्लॉक में प्रवेश नहीं करते, हम करने के लिए सीधे जाओ और कुछ और एक अपवाद नहीं बढ़ाएं। यह बग किसी भी वाक्य रचना-हाइलाइटिंग वातावरण में अविश्वसनीय रूप से स्पष्ट है, शुक्र है कि (?) कोड गोल्फ ऐसा वातावरण नहीं है।


5
आप समझ गए। मैंने पहले पायथन और लुआ दोनों को किया है, और अब रूबी पर शुरू कर रहा हूं। लुआ उस एक का उपयोग करता है।
Riking

7
ब्रह्मांड का अर्थ देखने के लिए कुछ भी नहीं है?
user80551


77

सी?

बहुत सामान्य कोड यहाँ ...

void main() = main--;

यह हास्केल है, सी। नहीं। यह "शून्य" नामक एक फ़ंक्शन को परिभाषित करता है जो दो तर्क लेता है। पहले का नाम "मुख्य" है और यदि दूसरा (अनाम) एक खाली ट्यूपल है, तो यह "मुख्य" चर लौटाता है। "-" हास्केल में एक टिप्पणी शुरू करता है, इसलिए ";" टिप्पणी की गई है।


21
तो दूसरे शब्दों में, यह धोखा है?
मिस्टर लिस्टर

75
कोड-चैलेंज प्रतियोगिताओं में धोखा सामान्य है। हम इसे रचनात्मकता कहते हैं। : पी
जो जेड

31
मैं इसे एक धोखा कहूँगा, रचनात्मकता नहीं। आपको अपने द्वारा चलाए जा रहे वातावरण को परिभाषित करना होगा इससे पहले कि आप यह भी विचार कर सकें कि कुछ कोड में त्रुटि होगी या नहीं। वरना मैं आपको केवल पंक्तिबद्ध शोर दे सकता था जो कि मलबोल है और आपसे पूछता है कि क्या यह संकलन करता है।
टिम एस।

5
यह सिर्फ आपको एक सेकंड के लिए रोकने और 'अरे क्या आप ऐसा कर सकते हैं ?' :)
intx13

10
@JoeZ। यह कुछ मामलों में गड़बड़ी की तरह लग सकता है
user80551

72

जावास्क्रिप्ट

var а = 100;
if (typeof a !== 'undefined') throw 'This should always throw, right?';
console.log('How am I still alive?');

यहां देखिए यह कैसे काम करता है:

पहला aवास्तव में है а(वह है, क्रायलिक यूनिकोड "ए")।


8
यह ट्रिक यूनिकोड टोकन (जैसे जावा, सी #) को स्वीकार करने वाली किसी भी भाषा पर लागू किया जा सकता है।
n --h'a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

83
@ n @hpla̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳, आपके उपयोगकर्ता नाम से
अनुकरणीय

9
बहुत स्पष्ट समाधान
thepirat000

6
इससे पहले कि यह किसी के लिए भी स्पष्ट है। मुझे यकीन है कि बहुत सारे newbies और तथाकथित "वेब विशेषज्ञ" इस पर फंस सकते हैं।
Thebluefish

42
स्पष्ट? इसलिए आप हमेशा अपने यूनिकोड नंबरों के बजाय अपने वैरिएबल नामों को देखते हैं कि वे क्या दिखते हैं? यदि आप "a" (या "а") खोजते हैं और आप जो अपेक्षा करते हैं, उसे पाने में असफल हो सकते हैं, लेकिन जब आप पढ़ रहे हों, तो आप इसे नहीं देख सकते हैं (कम से कम यहां दिखाए गए फ़ॉन्ट में)।
टिम एस।

70

जावास्क्रिप्ट

जब मैं निम्नलिखित कोड प्रदान कर रहा था तो मुझे कई बार कहा गया था "यह एक टाइपो होना चाहिए! यह कैसे काम कर सकता है?"

console.log( 42..toString(2) );

नीचे दिए गए विवरण को हाल ही के मामलों में से एक से कॉपी किया गया था ।

जैसा कि आप शायद जानते हैं, जावास्क्रिप्ट में शाब्दिक को छोड़कर सब कुछ एक वस्तु है। संख्याएं भी वस्तुएं हैं। तो सैद्धांतिक रूप से (और व्यावहारिक रूप से) आप डॉट नोटेशन के माध्यम से किसी भी गैर-शाब्दिक के गुणों या कॉल विधियों को प्राप्त कर सकते हैं, जैसा कि आप करते हैं 'string'.lengthया [1,2,3].pop()। संख्या के मामले में आप ऐसा ही कर सकते हैं लेकिन आपको यह ध्यान रखना चाहिए कि एक बिंदु के बाद पार्सर संख्या के एक भिन्नात्मक भाग की तलाश करेगा जो फ्लोट मान (जैसे 123.45) की अपेक्षा कर रहा है । यदि आप एक पूर्णांक का उपयोग करते हैं, तो आपको उस पार्सर को "बताना" चाहिए जो एक भिन्नात्मक भाग खाली है, एक संपत्ति को संबोधित करने से पहले एक अतिरिक्त बिंदु सेट करना 123..method():।


18
एक लुआ आदमी के रूप में, मैं उम्मीद कर रहा था422
मनिप

3
बहुत साफ-सुथरे इस प्रयोग को पहले नहीं देखा था।
नित

5
पूरी तरह से इस्तेमाल किया जा रहा है के लिए बुरा लग रहा है .. संकेतन के है, लेकिन पूरी तरह से .toString(a freaking argument here?)संकेतन के बारे में जानकारी : पी ओह अच्छी तरह से, यह अब तक पता लगा लिया :)
डेविड Mulder

यह आउटपुट क्या करता है? और क्यों ? मैं उत्सुक हूँ।
निकोलस बारबुल्स्को

3
आलसी के लिए, तर्क आधार को निर्दिष्ट करता है (इसलिए यह बाइनरी में 42 को प्रिंट करेगा), और इस कोड के लिए महत्वपूर्ण नहीं है। ..भ्रामक हिस्सा है।
कैट

63

दे घुमा के

#!/bin/bash

[ 1 < 2 ] && exit

for i in `seq 1 $[2 ** 64]`
    do "$0" | "$0"
done

while [[ false ]]
    do :
done

if maybe
    do [: [: [: [: [; [; [; [; ;] ;] ;] ;] :] :] :] :]
fi

परिणाम

  • आप उम्मीद कर सकते हैं कि स्क्रिप्ट किसी भी त्रुटि का उत्पादन नहीं करेगी, क्योंकि यह पहली कमांड के बाद बाहर निकलता है। यह नहीं है

  • आप forलूप के कारण चल रहे फोर्क बम के कारण होने वाले सामान्य त्रुटि संदेशों की उम्मीद कर सकते हैं । कोई कांटा बम नहीं है।

  • आप ब्लॉक के maybeअंदर गुम कमांड या सिंटैक्स त्रुटि के पूरे गुच्छा के बारे में शिकायत करने की उम्मीद कर सकते हैं if। यह नहीं होगा

  • स्क्रिप्ट में केवल त्रुटि संदेश का उत्पादन समाप्त हो सकता है 2: No such file or directory

व्याख्या

  • [ को कोसना विशेष नहीं है, इसलिए < 2 , हमेशा की तरह, पुनर्निर्देशन करता है। जब तक 2कि वर्तमान निर्देशिका में नाम के साथ एक फ़ाइल नहीं है , यह एक त्रुटि का कारण होगा।

  • ऊपर उस त्रुटि के कारण, पहले की कमांड && में एक गैर-शून्य निकास स्थिति exitहोगी और इसे निष्पादित नहीं किया जाएगा।

  • forपाश अनंत नहीं है। वास्तव में, कोई लूप नहीं है। चूँकि बैश 2 की 64 वीं शक्ति की गणना नहीं कर सकते हैं, अंकगणितीय अभिव्यक्ति का परिणाम है0

  • [[ false ]] यदि परीक्षण false एक अशक्त स्ट्रिंग है। ऐसा नहीं है, इसलिए यह whileलूप अनंत है।

  • उपरोक्त के कारण, ifकथन कभी निष्पादित नहीं होता है, इसलिए कोई त्रुटि नहीं मिलती है।


55

पर्ल

use strict;
use warnings;
Syntax error!
exit 0;

स्रोत और स्पष्टीकरण: https://stackoverflow.com/questions/11695110


137
पर्ल प्रोग्राम आम तौर पर त्रुटियों की तरह दिखते हैं।
ugoren

1
@ केवल जब पर्ल के थोड़े से ज्ञान से लिखा और पढ़ा जाता है।
टीएलपी

8
आपको यह पसंद आएगा कि @ ugoren की टिप्पणी का उत्तर दो बार के रूप में कई बार हुआ है :)
yo '

2
विंडोज शेल ट्रिक की याद दिलाता है, "अगर आप खुश हैं और आप इसे जानते हैं, तो सिंटैक्स एरर!"
जोवेस्टी

47

जावा

class Gotcha {
    public static void main(String... args) {
        try  {
            main();
        } finally {
            main();
        }
    }
}

यहां कोई स्टैक ओवरफ्लो नहीं होता; के साथ कदम।

पहली नज़र में, यह एक उत्पादन करना चाहिए StackOverflowError, लेकिन यह नहीं है! यह वास्तव में हमेशा के लिए चलता है (कम से कम सभी व्यावहारिक उद्देश्यों के लिए; तकनीकी रूप से यह एक समय के बाद समाप्त हो जाएगा जब ब्रह्मांड की आयु की तुलना में लंबे समय तक परिमाण के कई आदेश)। क्या आप जानते हैं कैसे चाहते हैं / क्यों यह काम करता है, को देखने के लिए इस । इसके अलावा, यदि आप सोच रहे हैं कि हम main()तर्क के बिना क्यों कॉल कर सकते हैं जब मुख्य विधि को आम तौर पर एक String[]तर्क की आवश्यकता होगी : ऐसा इसलिए है क्योंकि हमने इसे यहां चर-तर्क होने की घोषणा की है, जो पूरी तरह से मान्य है।


3
जैसा कि आपके द्वारा जोड़ा गया प्रश्न बताता है, यह अनिश्चित काल तक नहीं चलता है, बल्कि एक लंबे समय तक चलता है।
केविन

1
@ केविन यहाँ अनावश्यक रूप से पांडित्य नहीं मिलता है; "ब्रह्मांड की उम्र से अधिक", सभी व्यावहारिक उद्देश्यों के लिए है, "हमेशा के लिए"।
अर्शजी

8
आप कहते हैं, "कोई स्टैक ओवरफ्लो यहां नहीं है", जब वास्तव में, सिस्टम स्टैक ओवरफ्लो को लगातार फेंकता रहता है, और अंततः स्टैक ओवरफ्लो अपवाद को फेंक देगा। (जैसा कि आप उल्लेख करते हैं, अंततः बहुत लंबा समय हो सकता है) और, यह स्टैक गहराई पर निर्भर करता है। एक छोटे VM, या एम्बेडेड सिस्टम पर, स्टैक की गहराई बहुत छोटी हो सकती है।
मैकके

@McKay यह कथन स्पष्ट रूप से एक मात्र फेंक रेखा है, जिसका शाब्दिक अर्थ नहीं है। ओपी एक प्रोग्राम के लिए पूछता है जो दिखता है कि यह एक त्रुटि पैदा करना चाहिए, लेकिन ऐसा नहीं करता है। सामान्य स्थिति में, उपरोक्त उत्तर इस आवश्यकता को पूरा करता है। ज़रूर, हम एक अस्पष्ट स्थिति को नियंत्रित कर सकते हैं जहां यह नहीं है, लेकिन यह जवाब को अमान्य नहीं करता है। मुझे उम्मीद है कि आप अपने पतन पर पुनर्विचार करेंगे।
अर्शजी

3
@McKay वैसे, मान लेते हैं कि ढेर आकार है छोटे (जैसे 100 के रूप में सामान्य ~ 10000 के खिलाफ), और हम कर सकते हैं अभी भी प्रति सेकंड 10,000,000 कॉल करते हैं। तब कुल चलने का समय 4,019,693,684,133,147 वर्षों के लिए निकलता है - अभी भी ब्रह्मांड की उम्र से बड़ा परिमाण के कई आदेश हैं।
अर्धजी

42

CoffeeScript

What? No error? Yep, this code does not have any bugs, why would it?

?एक स्थान के बाद एक ऑपरेटर है जो एक फ़ंक्शन को कॉल करता है, लेकिन केवल अगर यह मौजूद है। जावास्क्रिप्ट में फ़ंक्शन नहीं होता है What, इसलिए फ़ंक्शन को कॉल नहीं किया जाता है, और इसके तर्क को केवल अनदेखा किया जाता है। कोड में अन्य शब्द फ़ंक्शन कॉल हैं जो वास्तव में कॉल नहीं किए जाते हैं, क्योंकि Whatफ़ंक्शन मौजूद नहीं है। अंत में, ?अस्तित्व ऑपरेटर है, क्योंकि यह कॉल फ़ंक्शन में उपयोग नहीं किया जाता है। अन्य वाक्य एंडर्स, जैसे कि काम नहीं करेंगे .या !नहीं करेंगे, जैसा .कि विधियों के लिए है, और !ऑपरेटर नहीं है (जिसे पहचानकर्ता के बाद उपयोग नहीं किया जा सकता है)। यह जानने के लिए कि कॉफीस्क्रिप्ट ने इसे जावास्क्रिप्ट में कैसे परिवर्तित किया, http://coffeescript.org/#try:What%3F%20No%20error%3F%20Yep%2C%20this%20code%20does%20notve2020%%20bugs%2C पर जाएं। % 20why% 20it% 20would% 3F


36

VBScript

&VBScript में ऑपरेटर स्ट्रिंग संयोजन है, लेकिन क्या पृथ्वी पर कर रहे हैं &&और &&&ऑपरेटरों? (याद रखें कि VBScript में "और" ऑपरेटर है And, नहीं &&।)

x = 10&987&&654&&&321

वह प्रोग्राम टुकड़ा कानूनी VBScript है। क्यों? और का मूल्य क्या है x?

लेक्सर इसे नीचे तोड़ता है x = 10 & 987 & &654& & &321। एक पूर्णांक शाब्दिक &है, जो विचित्र रूप से पर्याप्त है, एक अष्टक शाब्दिक है। एक अष्टाक्षर शाब्दिक &है, जो कि और भी अधिक विचित्र है, एक लंबा पूर्णांक है। तो x का मान उन चार पूर्णांकों के दशमलव मानों का संघटन है 10987428209:।


8
वह तो बस ... वाह।
प्रिमो

27

उद्देश्य सी

कोई बड़ी बात नहीं है, लेकिन इसने मुझे चौंका दिया है जबकि एक टिप्पणी के अंदर एक लिंक डालने की कोशिश की:

http://www.google.com
        return 42;

http एक कोड लेबल है यहां, ऐसे लेबल का उपयोग गोटो निर्देशों में किया जाता है


8
यह किसी भी सी-लाइक भाषा में काम करना चाहिए जो //टिप्पणियों का समर्थन करती है ।
इल्मरी करोनें

हाँ, शायद, मैं सिर्फ पोस्ट करते समय निश्चित नहीं था
पायोत्र

14
हालाँकि, प्रति प्रोटोकॉल प्रति एक URL सीमित है।
बेन वोइगट

1
आप अभी भी उसी दायरे में https: // का उपयोग कर सकते हैं।
फ्लोरियन एफ

25

सी#

class Foo
{
    static void Main(string[] args)
    {
        Bar();
    }

    static IEnumerable<object> Bar()
    {
        throw new Exception("I am invincible!");
        yield break;
    }
}

क्योंकि Barविधि एक करता है yield, विधि वास्तव में जब बुलाया नहीं चलता है, तो यह एक एन्यूमरेटर लौटाता है, जो कि पुनरावृत्त होने पर, विधि चलाता है।


लास्ट में ... यहाँ FOO और BAR :) है
VVK

1
यह वास्तव में मायने नहीं रखता है कि चीजों के नाम के लिए फू और बार हैं;)
मैकके

22

सी

main=195;

X86 प्लेटफ़ॉर्म पर काम करता है, जहाँ 195 रिटेल के लिए ओपकोड है। कुछ नहीं करता,


1953 में रिटेक के लिए ओपकोड सही नहीं है?
डेनिस

मेरे लिए काम नहीं करता है। मुझे उम्मीद है कि यह पता 195 पर कोड निष्पादित करेगा।
nwellnhof

Tbanks @ डेनिस, कोड सही था, स्पष्टीकरण गलत था।
ugoren

3
किसी भी प्लेटफ़ॉर्म पर ( आधुनिक x86 सहित ) जहां पृष्ठों को निष्पादन योग्य होने के बिना भी पढ़ा जा सकता है, यह प्रविष्टि पर क्रैश हो जाएगा mainक्योंकि mainडेटा खंड में रखा गया है, जो निष्पादन योग्य नहीं है। जाहिर है, दुर्घटना नहींconst int main=195 होगी (x86 पर) (लेकिन एक कचरा निकास स्थिति पैदा करेगा) क्योंकि डिफ़ॉल्ट रूप से उसी खंड में रखा गया है और इसलिए निष्पादन योग्य है। ( .rodata.textconst char main[]="1\300\303";
सक्सेसफुल तरीके

2
मैं एक 64 बिट मशीन पर हूं (मुझे नहीं पता कि यह कुछ भी बदलेगा) और मुख्य = 195 एक seffault देता है, लेकिन int int मुख्य = 195; काम करता है।
w4etwetewtwet

21

जावा

शायद बहुत स्पष्ट है।

public static void main(String[] varargs) throws Exception{
    char a, b = (char)Integer.parseInt("000d",16);
    // Chars have \u000d as value, so they're equal
    if(a == b){
        throw new Exception("This should be thrown");
    }
}

क्या?

एक सिंटैक्स त्रुटि के बाद फेंकता है \u000d\u000dएक नई लाइन के लिए यूनिकोड है। हालांकि यह टिप्पणी की गई है, जावा संकलक व्यवहार करता है कि कोड के बाद क्या है क्योंकि यह अब तक टिप्पणी नहीं की गई है।


11
आपके varargsवररग्स नहीं हैं;)
नवीन

सवाल था "कोड जो दिखता है वह विफल हो जाता है" लेकिन नहीं "कोड ऐसा लगता है कि यह विफल हो जाता है, लेकिन ऐसा कुछ अलग तरीके से होता है"। अपवाद के बजाय सिंटैक्स त्रुटि होना अभी भी एक त्रुटि है।
नजल्ल

19
मुझे लगता है कि आपको मूल प्रश्न को फिर से पढ़ना चाहिए: "या कुछ अन्य असंबंधित त्रुटि उत्पन्न करता है।"
टॉम वेरेलस्ट

दरअसल, इसके बिना \u000d, यह अपरिभाषित मूल्य के संदर्भ का उपयोग करेगा a
लीजियनममाल 978

19

सी ++

#include <iostream>

int succ(int x)
{
  return x + 1;
}

int succ(double x)
{
  return int(x + 1.0);
}

int succ(int *p)
{
  return *p + 1;
}

int main()
{
  std::cout << succ(NULL) << '\n';
}

क्यों?

NULLएक अंतरजाल स्थिरांक है, इसलिए यह intअतिभार से सख्ती से मेल खाता है int*। फिर भी, अधिकांश प्रोग्रामर NULLपॉइंटर्स के साथ जुड़े हुए हैं, इसलिए एक अशक्त पॉइंटर डिफरेंस की उम्मीद की जा सकती है।


11
शुक्र है, सी ++ 11 कार्यान्वयन को परिभाषित करने की अनुमति देता है NULLके रूप में nullptr, और कार्यान्वयन कि इतने (अभी तक यह है कि मैं के बारे में पता भी नहीं, लेकिन मैं उन्हें उम्मीद करते हैं) करते हैं उम्मीद विभाजन गलती दे देंगे।
hvd

16

अजगर

print """""quintuple-quoted strings!"""""

पूरी तरह से मान्य है, लेकिन आउटपुट का अनुमान लगाना कठिन है। पहले 3 "अक्षर एक मल्टीलाइन स्ट्रिंग शुरू करते हैं और अगले दो स्ट्रिंग का हिस्सा होते हैं। अंत में, पहले तीन" स्ट्रिंग को समाप्त करते हैं और अंतिम दो एक रिक्त स्ट्रिंग शाब्दिक होते हैं जो पार्सर द्वारा मल्टीलाइन स्ट्रिंग में समतल हो जाते हैं। ।


20
बस एक बोनस: print """""""""Python strings don't have to start with the same number of quotes they end with."""""
कोनराड बोरोस्की

15

जावास्क्रिप्ट

if (1/0 === -1/0) {
  throw "Surely there's an error in here somewhere...";
}

यह काम किस प्रकार करता है:

जेएस में सकारात्मक और नकारात्मक अनंत है, और शून्य से विभाजित करने के लिए कोई त्रुटि नहीं है।


2
आपको NaN के साथ कुछ चालें करने में सक्षम होना चाहिए ...
intx13

8
meh, यह किसी भी भाषा में फ्लोट्स के साथ होता है।
नवीन

3
@ नवीन: किसी भी भाषा में जहां झांकियों का विभाजन शून्य त्रुटि नहीं करता है।
nwk

2
@nwk फ्लोट के लिए IEEE मानक कहता है कि शून्य से विभाजन एक inf होना चाहिए। मुझे इसमें परिवर्तन करने वाली किसी भी भाषा की जानकारी नहीं है।
नवीन

1
IEEE 754 में दो मॉडल निर्दिष्ट हैं: संकेतन NaN / Inf (जो FP शून्य विभाजन पर अपवाद बढ़ाता है, -1 से वर्गमूल, अंडरफ़्लो / अतिप्रवाह आदि), और गैर-संकेतन (जो व्यवहार करता है NaN/ Infअच्छी तरह से परिभाषित गणित के लिए नियमित रूप से बीजीय मूल्यों की तरह) उन पर)। आधुनिक एफपी हार्डवेयर को दोनों तरीकों से संचालित करने के लिए कॉन्फ़िगर किया जा सकता है। भाषा-नास्तिक; शर्म नहीं आती।
ulidtko

14

सी ++

ट्रिग्राफ और स्पेस-कम लैम्ब्डा को मिलाना काफी भ्रामक हो सकता है और निश्चित रूप से उन लोगों के लिए गलत दिखेंगे जिन्हें ट्रिग्राफ के बारे में जानकारी नहीं है:

int main()
{
    return??-??(??)()??<return"??/x00FF";??>()??(0??);
}

यह काम किस प्रकार करता है:

कुछ सिक्वेंस जिनमें 3 सिंबल होते हैं, ?? से शुरू होते हैं, ट्रिग्राफ कहलाते हैं और इसे पूरी तरह से कंप्लीट प्रीप्रोसेसर द्वारा प्रतिस्थापित किया जाएगा। प्रीप्रोसेस्ड, विचाराधीन पंक्ति निम्नानुसार है: वापसी ~ [] () {वापसी "\ x00FF"; } () [0]; जैसा कि एक देख सकता है, यह एक अतिरंजित लैम्ब्डा फ़ंक्शन है, जो 0xFFth वर्ण से मिलकर एक स्ट्रिंग लौटाता है। [0] सिर्फ इतना है कि चरित्र को निकालता है और ~ यह वंचितों, तो 0 दिया जाता है।


12
मान्य C ++ प्रोग्राम int main(){(([](){})());}भी ट्रिगर होने पर अच्छा लग सकता है ...
Angew

1
वह भी क्या करता है?
जो जेड।

1
@ जो जेड जेड [](){}एक लंबोदर फ़ंक्शन है, जैसे [](int a){return a+1;}एक है। ([](){})()उस फ़ंक्शन को कॉल करता है, voidअगर मैं गलत नहीं हूं तो वापस लौटता हूं। पूरा (([](){})());तब उबलता है (void);, जो एक बयान कुछ नहीं कर रहा है। mainतब बस शून्य वापस आ जाता है, जैसे कि यह एक returnबयान के बिना होना चाहिए ।
tomsmeding

13

VBA / VB6

Private Sub DivByZero()

    Dim x() As String
    x = Split(vbNullString, ",")

    Debug.Print 1 / UBound(x)

End Sub

खाली कॉमा सीमांकित स्ट्रिंग को विभाजित करके एक खाली सरणी देना चाहिए। शून्य त्रुटि से एक स्पष्ट विभाजन होना चाहिए, है ना?

नहीं। हैरानी की बात है, जब किसी भी शून्य लंबाई स्ट्रिंग को विभाजित किया जाता है तो रनटाइम आपको 0 की कम बाउंड और -1 के ऊपरी बाउंड के साथ एक सरणी देता है। उपरोक्त कोड -1 आउटपुट करेगा।


@ मिनिटेक वास्तव में, यदि आप UBound के लिए एक खाली सरणी पास करते हैं, तो यह आपको एक सीमा से बाहर की सदस्यता प्रदान करेगा।
कोमिन्टर्न

… कुंआ। मैं उसे वापस ले लेता हूँ। VBA = /
Ry-

1
@ मिनिटेक हां। मैं समझता हूं कि VB6 में स्प्लिट के मूल कार्यान्वयन में यह एक बग था। .NET में वे जानबूझकर "जोड़ा गया" (या शायद दस्तावेज बेहतर शब्द है) इस हैक का फायदा उठाने वाले सभी VB6 कोड के साथ पिछड़े संगतता को बनाए रखने के लिए U-1 को खाली करने वाले खाली सरणियों के लिए व्यवहार। मूल रूप से विंडोज एपीआई कॉल के बिना VBA / VB6 में इस सरणी को मूल रूप से प्राप्त करने का एकमात्र तरीका है एक अशक्त स्ट्रिंग को विभाजित करना।
कॉमिनटर्न

12

जावास्क्रिप्ट

5..toString();
5 .toString();

देता है: ५

जहाँ तक:

5.toString();

सिंटैक्सएयर देता है

यह काम किस प्रकार करता है:

जावास्क्रिप्ट एक बिंदु पर एक अस्थायी बिंदु शाब्दिक के रूप में डॉट को पार्स करने की कोशिश करता है


13
यह कैसे हुआ कि आपने ठीक वैसा ही मामला पोस्ट किया जैसा मैंने एक घंटे बाद किया?
VisioN

1
हे दृष्टि, क्षमा करें, लेकिन मैंने आपके उत्तर की जांच नहीं की। मैंने अंतरिक्ष के साथ एक मामला भी जोड़ा। मैंने इसे एक बार जावास्क्रिप्ट गार्डन पर और कुछ नहीं पढ़ा।
सुमीत कश्यप

1
सुमीत, क्षमा करें। आपका उत्तर अच्छा है - और बहुत स्पष्ट - @VisioN द्वारा उत्तर की तुलना में।
निकोलस बारबुलेसको

12

एचटीएमएल

यहाँ पहली पोस्ट, मुझे यकीन नहीं है कि मुझे यह मिलेगा या नहीं, लेकिन यहाँ जाता है।

<html>
    <head></head>
    <body>
        <?php $_POST['non-existant'] = $idontexisteither ?>
    </body>
</html>

यह एक .htmlफ़ाइल है ...


9
तो चाल सिर्फ यह है कि यह PHP ब्लॉक को निष्पादित नहीं करेगा क्योंकि फ़ाइल में .htmlविस्तार है और आपके वेब सर्वर को .htmlफ़ाइलों को PHP के रूप में पार्स करने के लिए कॉन्फ़िगर नहीं किया गया है ?
VisioN

5
हाँ। क्या यह धोखा है? @VisioN
Albzi

2
मुझे पूरा यकीन है कि यह धोखा है। शीर्ष पर बोल्ड में कम से कम "HTML" लिखें।
नवीन

अच्छा लगा! :-) चाल ने मुझ पर काम किया।
निकोलस बारबुलेसको

1
मैंने यह स्पष्ट करने के लिए संपादन किया कि यह किस भाषा में लिखी गई है
vijrox

9

PHP (40 बाइट्स)

<?for(;;$e.=$e++)foreach($e::$e()as&$e);

इस प्रश्न में मैंने यही उत्तर दिया था: इन्सानिटी चेक प्रोग्राम

यह विचार था कि एक कोड बनाया जाए जो त्रुटियां उत्पन्न करे।

पहली त्रुटि जो हम सोचेंगे, वह वाक्य रचना त्रुटि है।

कोई सिंटैक्स त्रुटियां नहीं हैं ...

अन्य यह होगा कि वर्ग / कार्य मौजूद नहीं है।

यह इतना दूर नहीं चलता है ...

अन्य एक टाइम-आउट या मेमोरी ओवरफ्लो होगा, लेकिन, फिर से, यह उस तक नहीं पहुंचता है ...

यहां कोड का परीक्षण करें: http://writecodeonline.com/php/ ( <?परीक्षण करने के लिए शुरुआत पर निकालें )।


3
यह एक लोकप्रियता प्रतियोगिता है। बाइट्स को बचाने के लिए उर कोड को क्रैम्प करने की आवश्यकता नहीं है। बेहतर पठनीयता के लिए बस इसे पुन: स्वरूपित करें;)
सांगो

मैं बाद में एक पठनीय संस्करण जोड़ूंगा। मैंने उसी सटीक उत्तर का उपयोग किया और इसे बिल्कुल भी संपादित नहीं किया।
इस्माईल मिगुएल

foreach(e()as&$e);इस समाधान का मूल है। e()सिंटैक्स-चेकर को चालू रखने के लिए है और &$eउसके बाद asविफलता का कारण बनता है।
TheConstructor

दरअसल, सब कुछ एक महत्वपूर्ण भूमिका निभाता है।
इस्माईल मिगुएल

9

VBScript

विजुअल बेसिक 6 यूजर्स को यह पता होगा

If Blah Then Foo Bar

कानूनी है, जैसा है

If Blah Then 
    Foo Bar
End If

लेकिन क्या बारे में

If Blah Then Foo Bar End If

? VBScript में कानूनी है, लेकिन VB6 में नहीं है। क्यों?

यह पार्सर में एक बग है; इरादा इसे अस्वीकार करने का था। जो कोड पता लगाता है, End Ifउसे यह भी जांचना चाहिए था कि क्या यह एक बहु-लाइन Ifस्टेटमेंट था, और यह नहीं था। जब मैंने इसे ठीक करने की कोशिश की और फिक्स के साथ एक बीटा भेजा, तो एक निश्चित प्रभावशाली उद्योग समाचार संगठन ने पाया कि उनके पास अपने VBScript कार्यक्रमों में से एक में कोड की यह पंक्ति थी और उन्होंने कहा कि जब तक हम संयुक्त राष्ट्र को नया संस्करण नहीं देते, तब तक वे इसे कम रेटिंग देंगे। बग को ठीक किया गया, क्योंकि वे अपने स्रोत कोड को बदलना नहीं चाहते थे।


क्या बग को बिना तय किए छोड़ने का कोई नुकसान है, जो आपको VBS 6 में मान्य नहीं है VBS कोड लिखने की अनुमति देने से अलग है?
गाबे

1
@Gabe: नहीं, VBScript कोड को VB में पोर्ट करने के लिए इसके अलावा कोई अन्य नकारात्मक पहलू नहीं है।
एरिक लिपर्ट

1
एक नाम ! यह समाचार संगठन कौन है?
निकोलस बारबुलेसको

9

सी

यह मुझे एक त्रुटि की याद दिलाता है जब मैंने सी। सीखा था। मूल रूप से मूल संस्करण वर्तमान जीसीसी के साथ काम नहीं करता है, लेकिन यह अभी भी करता है:

#define ARR_SIZE 1234
int main() {
    int i = ARR_SIZE;
    int arr[ARR_SIZE];
    while(i >= 0) {
        (--i)[arr] = 0;
    }
    i = *(int*)0;
}

यह स्पष्ट रूप से segfaults है क्योंकि हम एक अशक्त सूचक को सही मानते हैं?

गलत - वास्तव में, यह एक अनंत लूप है क्योंकि हमारी लूप स्थिति एक के बाद एक बंद है। उपसर्ग घटने के कारण, i1023 से -1 तक चलता है। इसका मतलब यह है कि असाइनमेंट न केवल सभी तत्वों को अधिलेखित करता है arr, बल्कि इससे पहले कि यह सीधे मेमोरी स्थान है - जो उस स्थान पर होता है जहां iसंग्रहीत होता है। पहुँचने पर -1, iअपने आप को ओवरराइट करता है 0और इस तरह लूप की स्थिति फिर से पूरी हो जाती है ...

यह मूल संस्करण था जिसे मैं अब पुन: पेश नहीं कर सकता:

यही बात i0 से ऊपर जाने और एक के बाद एक होने के साथ काम करती है । नवीनतम जीसीसी हमेशा मेमोरी में iपहले स्टोर arrकरता है; यह पुराने संस्करणों में भिन्न रहा होगा (शायद घोषणा के आदेश के आधार पर)। यह एक वास्तविक त्रुटि थी जिसे मैंने अपने पहले खिलौना कार्यक्रमों में उत्पादित किया था जो सरणियों से निपटता था।

इसके अलावा, यह स्पष्ट है कि अगर आप जानते हैं कि पॉइंटर्स C में कैसे काम करते हैं, लेकिन अगर आप नहीं करते हैं तो आश्चर्य हो सकता है:

आप सोच सकते हैं कि असाइनमेंट (--i)[arr]एक त्रुटि फेंकता है, लेकिन यह मान्य और इसके बराबर है arr[--i]। एक अभिव्यक्ति a[x]सिंटैक्टिक शुगर है *(a + x)जिसके लिए सूचक को अनुक्रमित तत्व के लिए गणना और डीरेफेरेंस करता है; इसके अलावा पाठ्यक्रम के अनुकूल है और इस तरह के बराबर है *(x + a)


1
जहां तक ​​मैं देख सकता हूं, लूप बॉडी को कभी भी निष्पादित नहीं किया जाना चाहिए (क्योंकि 1234 <= 0 गलत का मूल्यांकन करता है)। क्या आपका संभवतः "> =" लिखने का मतलब था?
celtschk

1
@celtschk हाँ, यह एक टाइपो था। ध्यान देने के लिए धन्यवाद!
l4mpi

क्या यह मेमोरी संरेखण वास्तव में निर्दिष्ट है, या बस कुछ कंपाइलरों में इस तरह से लागू किया गया है?
पाओलो एबरमन

9

जावा

public class WhatTheHeckException extends RuntimeException {
    private static double d;        // Uninitialized variable
    public static void main(String... args) {
        if (d/d==d/d) throw new WhatTheHeckException();
        // Well that should always be true right? == is reflexive!

        System.out.println("Nothing to see here...");
    }
}

यह क्यों काम करता है:

अनआर्गेनाइज़्ड फ़ील्ड में डिफ़ॉल्ट मान होते हैं। इस मामले में d सिर्फ 0 है । दोहरे खंड में 0/0 = NaN , और NaN स्वयं के बराबर नहीं है, इसलिए यदि गलत है। ध्यान दें कि यदि आपके पास 0/0 == 0/0 होता, तो यह काम नहीं करता , जैसा कि पूर्णांक 0/0 विभाजन होगा, WOULD एक अंकगणित को फेंक देगा ।


8

सी ++ 11

struct comp {
    comp operator compl () { return comp { }; }
    operator comp () { return comp { }; }
    compl comp () { return; comp { }; }
};

int main() {
    comp com;
    compl com;
}

संकलन और बिना किसी चेतावनी के साथ चलता है g++ -pedantic-errors -std=c++11

complएक मानक वैकल्पिक वर्तनी है ~, जैसे के notलिए एक विकल्प है !complयहाँ पहले ओवरराइड करने के लिए उपयोग किया जाता है operator~और फिर एक विध्वंसक को परिभाषित करता है। एक और चाल यह है कि operator compप्रकार compसे स्वयं के लिए एक रूपांतरण समारोह है। आश्चर्यजनक रूप से मानक ऐसे रूपांतरण फ़ंक्शन को मना नहीं करता है - लेकिन यह कहता है कि इस तरह के फ़ंक्शन का उपयोग कभी नहीं किया जाता है।


8

VBScript

function[:(](["):"]):[:(]=["):"]:
end function
msgbox getref(":(")(":)")

'Output: :)

यह क्या करता है:

यदि आप वर्ग कोष्ठक का उपयोग करते हैं, तो VBScript में फ़ंक्शन, उप और परिवर्तनीय नाम कुछ भी हो सकते हैं। यह स्क्रिप्ट एक फ़ंक्शन को बुलाती है :(और एक तर्क देती है, "):"लेकिन क्योंकि वे सामान्य नामकरण सम्मेलन का पालन नहीं करते हैं जो वे वर्ग कोष्ठक से घिरे होते हैं। वापसी मान पैरामीटर मान पर सेट है। एक लाइन पर सब कुछ प्राप्त करने के लिए एक अतिरिक्त कोलन का उपयोग किया जाता है। Msgbox स्टेटमेंट को फ़ंक्शन का संदर्भ मिलता है (लेकिन कोष्ठक की आवश्यकता नहीं है) और इसे स्माइली के :)साथ पैरामीटर के रूप में कॉल करता है।


1
इतने सारे भद्दे चेहरे :(
जेड। 19

8

सी#

वास्तव में मैंने अपने आप को गलती से ऐसा करते हुए पकड़ लिया :)

public static object Crash(int i)
{
    if (i > 0)
        return i + 1;
    else
        return new ArgumentOutOfRangeException("i");
}

public static void Main()
{
    Crash(-1);
}

फेंक , वापस नहीं ।


Haha, साइट में आपका स्वागत है! पहली पोस्ट के रूप में इस की बहादुरी के लिए कुदोस। :)
जोनाथन वान मैट्रे

7

जावा

enum derp
{

    public static void main(String[] a)
    {
        System.out.println(new org.yaml.snakeyaml.Yaml().dump(new java.awt.Point()));
    }
}

और यह कैसे काम करता है:

आपको लगता है कि एनम वैध नहीं है, लेकिन इसके वैध हैं; तब आपको लगता है कि यह एक मानक पॉइंट ऑब्जेक्ट विशेषताओं को प्रिंट करेगा, लेकिन गोच्टा! कैसे नागमणि serializes के कारण आप एक चिकनी StackOverFLow त्रुटि प्राप्त करते हैं

और दूसरा:

enum derp
{

    ;public static void main(String[] a)
    {
        main(a);
    }
    static int x = 1;

    static
    {
        System.exit(x);
    }
}

आपको लगता है कि एक स्पष्ट वापसी के कारण एक Stackoverflow होगा, लेकिन कार्यक्रम इस तथ्य का दुरुपयोग करता है कि जब आप इसे चलाते हैं तो इसे static{} blockपहले निष्पादित किया जाएगा और इसके कारण यह मुख्य () लोड होने से पहले बाहर निकल जाता है

enum derp
{

    ;
        public static void main(
            String[] a)
    {
        int aa=1;
        int ab=0x000d;
        //setting integer ab to \u000d  /*)
        ab=0;

        /*Error!*/
        aa/=ab;
    }
    static int x = 1;
}

यह एक उस पर निर्भर करता है, जो कि /*Error*/कोड से बाहर कोड के रूप में टिप्पणी के लिए समापन बिंदु के पहले ab = 0; 0x000d को पूर्णांक के बारे में व्याख्या अगली पंक्ति की टिप्पणी को सक्रिय करने के लिए नई पंक्ति को छिपाती है


1
मैं अभी नहीं कर सकता, लेकिन यह अच्छा होगा यदि आप इसे सुधारना चाहते हैं, यदि संभव हो तो। यह पढ़ना थोड़ा कठिन है ...: पी
जोस्टी

उन्हें और अधिक स्पष्ट बनाया; और स्पॉइलर टैग का उद्देश्य है कि पहली बार में स्पष्ट रूप से चालें स्पष्ट हो जाएं
मास्टरएक्स 244

2
रुको, तो पहले वाला वास्तव में एक त्रुटि पैदा करता है? यह वही है जो सवाल पूछ रहा है। और दूसरे में सिर्फ System.exit (1) ही क्यों?
सवारी

3
कोई भी जावा प्रोग्रामर दूसरे स्निपेट में स्टैक ओवरफ्लो की उम्मीद नहीं करेगा। क्षमा करें, यह बहुत स्पष्ट है।
तोबियास

1
@VVK कोडगॉल्फिंग आदत के enum{बजाय class{एक बाइट बचाता है
masterX244

6

सी

स्ट्रिंग्स और सरणियों सी में बहुत भ्रमित किया जा सकता है

main(){
  int i=0;
  char string[64]="Hello world;H%s";
  while(strlen(&i++[string])){
    i[' '+string]=string[i]-' ';
  }
  5[string]=44;
  return printf(string,'!'+string);
}

9
पढ़ने में कठिन है, लेकिन मुझे नहीं पता कि लोग किस तरह की त्रुटि की उम्मीद कर रहे हैं
ब्रायन चेन

3
मैं सिर्फ मान्य लेकिन अपरंपरागत संकेतन के लोगों को याद दिलाना चाहता था - इसे आप क्या करेंगे। यह कहने से पहले मैं तीन बार निश्चित रूप से मान्य होगा। सबसे पहले, 5 [स्ट्रिंग] जैसे भाव एक आकस्मिक कोडर के लिए अच्छी तरह से ज्ञात नहीं हैं और सरणी अनुक्रमण के तर्क को धता बताते हैं। दूसरे, '' + स्ट्रिंग जोड़ 2 स्ट्रिंग्स की तरह दिखता है, लेकिन गलत प्रकार के उद्धरणों के साथ। और तीसरा, & i ++ पूर्णांक के पते की तरह दिखता है (लेकिन पूर्ववर्तीता इस बात का ध्यान रखती है)। अंत में, हम स्ट्रिंग शाब्दिक (लेकिन बड़े बैकिंग बफर से परे नहीं) से आगे लिख रहे हैं।
ओरियन

बहुत बुरा नहीं लगता। मैंने केवल C ++ में थोड़ा सा कोडित किया है, लेकिन मैं यह पता लगा सकता हूं।
नवीन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.