C++ में अंडरस्कोर (_) नामकरण नियम
C++ मानक कुछ अंडरस्कोर पैटर्न को कार्यान्वयन (कंपाइलर/लाइब्रेरी) के लिए आरक्षित करता है। इनका उपयोग अनिर्दिष्ट व्यवहार या नाम टकराव का कारण बन सकता है।
सभी स्कोप में आरक्षित (कभी उपयोग न करें)
- दो अग्रणी अंडरस्कोर: `__foo`, `__Bar`, `__123`
- एक अग्रणी अंडरस्कोर + बड़ा अक्षर: `_Foo`, `_X`, `_MAX_SIZE`
ये कंपाइलर आंतरिक नाम, अंतर्निहित फ़ंक्शन, कीवर्ड्स आदि के लिए आरक्षित हैं।
ग्लोबल/नेमस्पेस स्कोप में आरक्षित (टालें)
- एक अग्रणी अंडरस्कोर + छोटा अक्षर: `_foo`, `_bar`, `_count`
ये ग्लोबल स्कोप में लाइब्रेरी आंतरिक नामों के साथ टकरा सकते हैं। लोकल स्कोप (क्लास मेंबर्स, फ़ंक्शन पैरामीटर्स, लोकल वेरिएबल्स) में आमतौर पर सुरक्षित हैं, लेकिन कई स्टाइल गाइड इन्हें हर जगह टालने की सलाह देते हैं।
अन्य आरक्षित पैटर्न
- विशिष्ट प्रीफिक्स: `LC_`, `SIG_`, `SIG`, `SIG_` (POSIX/सिस्टम हेडर्स)।
- सफ़िक्स: `_t` (POSIX टाइप परिभाषाएँ, जैसे `size_t`, `pthread_t`।)
- कीवर्ड्स के रूप में ऑपरेटर्स: `and`, `or`, `not` आदि (हेडर `
` के साथ)।
सुरक्षित और अनुशंसित प्रथाएँ
- स्नेक_केस: `my_variable`, `buffer_size`, `user_name` (सबसे आम)।
- ट्रेलिंग अंडरस्कोर: `member_`, `value_` (कीवर्ड्स/पैरामीटर्स से टकराव से बचने के लिए, Google/LLVM स्टाइल)।
- कैमलकेस: `myVariable`, `bufferSize`।
- कॉन्स्टेंट्स/मैक्रोज़ के लिए UPPER_SNAKE_CASE: `MAX_SIZE`, `DEFAULT_TIMEOUT`।
सारांश तालिका
| पैटर्न | स्थिति | उदाहरण |
|---|---|---|
| __name | हर जगह आरक्षित | __func, __LINE__ |
| _Name | हर जगह आरक्षित | _Alignas, _Complex |
| _name (ग्लोबल) | ग्लोबल में आरक्षित | _errno (लाइब्रेरी) |
| name_ | ✅ सुरक्षित | member_, ptr_ |
| snake_case | ✅ सुरक्षित/अनुशंसित | user_name |