2012-11-10 9 views
21

मैं इस त्रुटि क्यों मिल रही:उपयोग

infinite.c:5:12: error: use of undeclared identifier 'true' 
    while (true) { 

1 error generated. 
make: *** [infinite] Error 1 

... जब मैं एक अनंत लूप के लिए इस सरल कोड संकलन करने की कोशिश?

#include <stdio.h> 

int main(void) { 
    int x = 0; 
    while (true) { 
     printf("%i\n", x); 
    } 
} 
+1

मिमी .. 'जबकि (1)' –

+1

का उपयोग करें और भी बेहतर: 'के लिए (;;)'। कोई जादू तुच्छ स्थिति नहीं है। और संभावना है कि आप वास्तव में स्थानीय घोषणाओं और बाहर निकलने की स्थिति को वैसे भी चिपका सकते हैं। –

उत्तर

16

सी में कोई अंतर्निहित बुलियन प्रकार नहीं है। तो यह नहीं जानता कि true क्या है। आप इस तरह से अपने दम पर यह घोषणा करने के लिए है:

#define TRUE 1 
#define FALSE 0 

[...] 
while (TRUE) { 
    [...] 
} 
+8

सी _has_ एक अंतर्निहित बूलियन प्रकार, इसे '_Bool' कहा जाता है। कंपाइलर को 'सत्य' और 'झूठा' पता है, किसी को '#' शामिल करना होगा, जो अंतर्निहित नहीं हैं - लेकिन फिर आप '_Bool' (जो थोड़ा बदसूरत है) के बजाय 'बूल' का उपयोग भी कर सकते हैं) । –

4

C99 बूलियंस का उपयोग करने के लिए stdbool.h शामिल करें।
आप C89 के साथ रहना चाहते हैं, तो यह अपने आप को परिभाषित:

typedef enum 
{ 
    true=1, false=0 
}bool; 
+0

यदि आपके पास 'stdbool.h' नहीं है तो बस उस चीज से चिपके रहें जो अर्थात् प्रीप्रोसेसर को इन मानों के लिए परिभाषित करता है और गणना नहीं करता है। –

+0

मुझे लगता है कि प्रीप्रोसेसर को पसंद करते हुए एनम्स या वाइसवर्सा पर परिभाषित करना इन मामलों में औपचारिकता है। –

30

पहचानकर्ता true डिफ़ॉल्ट रूप से घोषित नहीं किया गया है। इसका उपयोग करने के लिए, दो समाधान:

  1. सी 99 में संकलित करें और <stdbool.h> शामिल करें।
  2. अपने आप को इस पहचानकर्ता को परिभाषित करें।

हालांकि, अनंत लूप for (;;) को अक्सर बेहतर शैली के रूप में माना जाता है।