2010-04-30 17 views
25

जीसीसी 4.4.1 C89बेकार वर्ग भंडारण विनिर्देशक

मैं निम्नलिखित कोड है:

static enum states 
{ 
    ACTIVE, 
    RUNNING, 
    STOPPED, 
    IDLE 
}; 

और मैं यह चेतावनी मिलती:

useless class storage specifier in empty declaration 

हालांकि, अगर मैं हटाने स्थैतिक कीवर्ड मुझे वह चेतावनी नहीं मिलती है।

मैं निम्नलिखित झंडे के साथ संकलन कर रहा हूँ:

-Wall -Wextra 

किसी भी सुझाव के लिए बहुत धन्यवाद,

+3

हो नहीं करना चाहिए एक ';' 'के बाद}' (शायद संबंधित नहीं है, बस सोचा था कि मैं यह उल्लेख करें) –

+0

मुमकिन त्रुटि थी "बेकार" के रूप में आप सवाल शीर्षक में है और नहीं "जब तक" जैसा कि आपके प्रश्न 'बॉडी' में है। –

+0

@ एंड्रियास - फिक्स्ड, बस जहां मैंने इसे प्रश्न में टाइप किया था। – ant2009

उत्तर

22

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

5

क्या आप स्थिर क्या करना चाहते हैं? के लिए

enum states { ... }; 
static enum states a; 

देते "एक" आंतरिक संबंध

static enum states { ... } a; 

शॉर्टकट के रूप में: यह वहाँ में कार्य करता है घोषणा आंतरिक संबंध में निर्धारित वेरिएबल देने के लिए। लेकिन चूंकि आप अपने कोड में एक चर को परिभाषित नहीं करते हैं, इसलिए वास्तव में यह बेकार है (यदि अवैध नहीं है)।

4

प्रयास करें:

static enum states 
{ 
    ACTIVE, 
    RUNNING, 
    STOPPED, 
    IDLE 
} avar; 

जो वास्तव में एक स्थिर चर Avar कहा जाता है बनाता है। केवल चर स्थिर हो सकते हैं, प्रकार नहीं।

12

आपकी enum घोषणा एक प्रकार को परिभाषित कर रही है, लेकिन यह उस प्रकार की वस्तु भी घोषित नहीं कर रही है।

static केवल चर और कार्यों पर लागू होता है, क्योंकि संकलक कहता है, यह उस संदर्भ में बेकार है जिसमें आपके पास है।

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