2010-07-27 12 views
6

मैं एक सी इस, "_MOVE_H" के बारे में इतना खास क्या है?

#ifndef _MOVE_H 
#define _MOVE_H 

class Move { 
    int x, y; 
public: 
    Move(int initX = 0, int initY = 0) : x(initX), y(initY) {} 
    int getX() { return x; } 
    void setX(int newX) { x = newX; } 
    int getY() { return y; } 
    void setY(int newY) { y = newY; } 
}; 

#endif 

की तरह और मेरे विस्मय करने के लिए फ़ाइल ++ #ifndef और #endif के बीच सभी कोड बस संकलक द्वारा नजरअंदाज कर दिया है (मैं कसम खाता हूँ कि मैं कहीं और _MOVE_H को परिभाषित नहीं कर रहा हूँ) है, और मेरे पास है लापता परिभाषाओं के बारे में सभी प्रकार की त्रुटियां। मैं सोच रहा था कि मैंने कुछ गलत किया है, लेकिन जब मैं एक और कुंजी का उपयोग करने का प्रयास करें (_MOVE_Ha की तरह, सब कुछ वापस सामान्य करने के लिए है। _MOVE_H कुछ सी में विशेष मतलब यह है ++?

मैं उबंटू 10.04, जीसीसी 4.4.3 चल रहा हूँ , अगर है कि मायने रखती है

धन्यवाद,

+1

लाइब्रेरी फ़ाइलों में से एक हो सकता है जिसमें आप इसके समावेशी गार्ड के लिए उपयोग कर रहे हैं? क्या आपने इसे देखा? बीटीडब्ल्यू, मैं आमतौर पर प्रोजेक्ट नाम के साथ इसे उपसर्ग करता हूं ताकि इस प्रकार के मुद्दे से बचने के लिए। – Naveen

+0

'परिभाषित' के बजाय '#pragma एक बार' का उपयोग करने का एक अन्य कारण गार्ड शामिल है ... – Inverse

+4

@ इनवर्क्स, '#pragma एक बार' एक कंपाइलर एक्सटेंशन है और सभी कंपाइलर्स द्वारा समर्थित नहीं है। गार्ड शामिल करें एकमात्र सुरक्षित कंपाइलर एकाधिक समावेश को रोकने के स्वतंत्र माध्यम हैं। –

उत्तर

15

सिर्फ ग्रेप _MOVE_H चलाने/usr/शामिल/C++ अपने मशीन

पर मेरे लिए में:

c++/4.5.0/bits/move.h:#ifndef _MOVE_H 

एक सामान्य नियम के रूप में, चीजों का उपयोग नहीं करते (वास्तव में कुछ भी) पहले से जुड़ा हुआ _ या __ द्वारा। यह आंतरिक उपयोग के लिए आरक्षित है। SOMETHING_MOVE_H (आमतौर पर कंपनी का नाम, ...) का उपयोग करें।

मुझे लगता है कि यह एक नया हेडर है जो सी ++ 0x पर चलने वाला अर्थ जोड़ने के लिए उपयोग किया जाता है।

+12

अंडरस्कोर नियम को स्पष्ट करने के लिए, निम्नलिखित चीजें आरक्षित हैं: किसी भी * वैश्विक * नाम '_' द्वारा पूर्ववर्ती, किसी भी प्रकार का नाम' __' द्वारा पूर्ववर्ती, और किसी भी नाम से किसी भी तरह से '_' द्वारा पूर्ववर्ती और पूंजी पत्र से शुरू होता है। ओपी पहले और तीसरे नियमों का पीछा करता है। –

+6

किसी भी नाम '__' वाले सभी नाम आरक्षित हैं। इसे उपसर्ग नहीं किया जाना चाहिए। Guid के लिए –

0

यह वही हेडर फाइल एक बार से अधिक शामिल किया जा रहा रोकने के लिए एक चाल है वास्तविक मूल्य आप #define नहीं बात करता है -।। के रूप में यह केवल कि हेडर में निर्धारित है इतने लंबे समय फ़ाइल, सम्मेलन NAME_HEADER_FILE_H राजधानियों में

यह चर्चा भी देखें #pragma once

+2

क्षमा करें, यह वास्तव में समस्या नहीं है। समस्या यह है कि, मेरी फाइल बिल्कुल शामिल नहीं है। – phunehehe

+0

क्षमा करें क्यू को पर्याप्त विवरण में नहीं पढ़ा –

5

अंडरस्कोर से शुरू होने वाली कुछ भी तो पूंजी पत्र कार्यान्वयन के लिए आरक्षित है। (यानी _M)। मुझे लगता है कि आप सामान्य अंडरस्कोर से दूर रहना चाहते हैं।

4

मेरा मानना ​​है कि जीसीसी में move.h नामक एक फ़ाइल शामिल है जिसमें सेंटीनेल _MOVE_H शामिल है। संभवतः आप इसके साथ टक्कर लगी है। एक अलग पहचानकर्ता का प्रयोग करें, अधिमानतः वह जो अंडरस्कोर से शुरू नहीं होता है। मैंने मेरा एक GUID रखा है, लेकिन फिर मैं वास्तव में जुनूनी :-)

+0

upvote! जबरदस्त हंसी! –

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