2011-03-16 14 views
5
CASE expr_no_commas ELLIPSIS expr_no_commas ':' 

मैं ग की वाक्य रचना शासन में इस तरह के एक नियम के देखा था, लेकिन जब मैं यह पुन: पेश करने की कोशिश:सी के केस स्टेटमेंट में इलिप्सिस का उपयोग कैसे करें?

int test(float i) 
{ 
switch(i) 
{ 
    case 1.3: 
    printf("hi"); 
} 
} 

यह विफल रहता है ...

+0

तुम्हें क्या लगता है कि अंडाकार एक भी अवधि है किया जाएगा ? यह है ... प्रतीक, यानी तीन अवधि मेरा पहला अनुमान होगा। – unwind

+1

बाइनरी प्रतिनिधित्व गलत होने पर 'फ्लोट' पर स्विचिंग खतरनाक है। – Benoit

+0

सी में सिमुलेटर/जेनरेटेड स्विच स्टेटमेंट रेंज के संभावित डुप्लिकेट (http://stackoverflow.com/questions/4680502/simulater-generated-switch-statement-range-in-c) –

उत्तर

11

ठीक है, इसमें मेरे हिस्से पर अनुमान लगाया गया है, लेकिन ऐसा लगता है कि आप gcc सी के विस्तार के बारे में बात कर रहे हैं जो किसी को switch मामलों में श्रेणियां निर्दिष्ट करने की अनुमति देता है।

निम्नलिखित मेरे लिए संकलित:

int test(int i) 
{ 
    switch(i) 
    { 
    case 1 ... 3: 
    printf("hi"); 
    } 
} 

नोट ... और यह भी ध्यान रखें कि ऐसी float पर नहीं जा सकते।

8

ELLIPSIS..., नहीं . का मतलब है। बयान होना चाहिए की तरह:

#include <stdio.h> 

int main() { 
    int x; 
    scanf("%d", &x); 

    switch (x) { 
     case 1 ... 100: 
      printf("1 <= %d <= 100\n", x); 
      break; 
     case 101 ... 200: 
      printf("101 <= %d <= 200\n", x); 
      break; 
     default: 
      break; 
    } 

    return 0;  
} 

BTW, यह एक non-standard extension of gcc है। मानक सी 99 में मुझे यह वाक्यविन्यास नहीं मिल रहा है।

+0

यह बहुत अच्छा है! – assem

+1

@assem यह बहुत गैर पोर्टेबल है। ऐसा मत करो, अगर/else का उपयोग करें। –

+0

+1 जिम, @assem, इस "सुंदर शांत" चीज़ से लुप्त न हों। उद्धरण के लिए – Microkernel

10

यह मानक सी नहीं है, 6.8.4.2 देखें:

प्रत्येक मामले लेबल की अभिव्यक्ति एक पूर्णांक लगातार अभिव्यक्ति

+0

+1! –

संबंधित मुद्दे