आज मैं एक नहीं बल्कि दिलचस्प संकलक त्रुटि पर ठोकर खाई:जीसीसी में अंतर्निहित मैक्रोज़ के रूप में अनारक्षित पहचानकर्ता होने का क्या कारण है?
int main() {
int const unix = 0; // error-line
return unix;
}
जीसीसी 4.3.2 के साथ निम्न संदेश देता है (हाँ, प्राचीन ...):
error: expected unqualified-id before numeric constant
जो निश्चित रूप से काफी भ्रमित है।
error: expected unqualified-id
int const unix = 0
^
<built-in>:127:14: note: expanded from:
#define unix 1
^
मैं निश्चित रूप से unix
, जो न तो अपर-केस में लिखा है उम्मीद नहीं थी और न ही अंडरस्कोर से शुरू मैक्रो होना करने के लिए:
सौभाग्य से, बजना (3.0) (हमेशा की तरह) एक छोटे से अधिक उपयोगी है , विशेष रूप से एक अंतर्निहित एक।
मैं जीसीसी में पूर्व-निर्धारित मैक्रो की जाँच की और (मेरे मंच पर) 2 देखते हैं कि का उपयोग करें "अनारक्षित" प्रतीक:
$ g++ -E -dM - < /dev/null | grep -v _
#define unix 1
#define linux 1
अन्य सभी प्रमुख अंडरस्कोर से "अच्छी तरह से व्यवहार" कर रहे हैं मैक्रो का उपयोग करते हुए परंपरागत सुरक्षित पहचानकर्ता, नमूना:
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define __unix__ 1
#define __unix 1
#define __CHAR_BIT__ 8
#define __x86_64 1
#define __amd64 1
#define _LP64 1
(यह एक गड़बड़ है और कोई विशेष आदेश होना प्रतीत नहीं होता है ...)
इसके अलावा, "समान" के बहुत सारे हैं प्रतीकों, तो मुझे लगता है कि पिछड़े संगतता का मुद्दा है ...
तो, unix
और linux
मैक्रोज़ कहां से आते हैं?
जीसीसी 4.7 में ठीक काम करता है, कुछ बग की तरह लगता है :) –
@ श्री अनीबिस: आह अच्छा, मैं जीसीसी 4.3.2 (काम पर) का उपयोग कर रहा हूं। –
मैंने ऐतिहासिक टैग जोड़ा, मुझे विश्वास है कि यह कम से कम ऐतिहासिक होगा। – Xeo