कॉमा (,) C/C++ में दो अलग भूमिकाएं निभाता है: **ऑपरेटर** और **सेपरेटर**।
1. कॉमा ऑपरेटर (Comma Operator)
- बाइनरी ऑपरेटर: बाएं ऑपरेंड इवैल्यूएट करता है, परिणाम डिस्कार्ड करता है, फिर दाएं ऑपरेंड इवैल्यूएट करता है और उसका मान रिटर्न करता है।
- **सबसे कम प्रेसिडेंस** - सभी ऑपरेटर्स से कम।
- असोसिएटिविटी: लेफ्ट-टू-राइट।
उदाहरण
#include <stdio.h>
int func1() { printf("func1\n"); return 1; }
int func2() { printf("func2\n"); return 2; }
int main() {
int x = (50, 60); // x = 60
int y = (func1(), func2()); // func1() फिर func2(), y = 2
// लूप में उपयोग
for (int i = 0, j = 10; i < j; i++, j--) {
printf("i=%d, j=%d\n", i, j);
}
return 0;
}
2. कॉमा सेपरेटर (Comma Separator)
- डिक्लेरेशन, फंक्शन पैरामीटर्स, इनिशियलाइजर लिस्ट्स में आइटम्स अलग करता है।
- ऑपरेटर **नहीं** - कोई इवैल्यूएशन ऑर्डर गारंटी नहीं (अनसीक्वेंस्ड)।
- सभी आइटम्स उपयोग किए जाते हैं।
उदाहरण
int a = 1, b = 2, c = 3; // डिक्लेरेशन सेपरेटर
func(a, b, c); // आर्गुमेंट सेपरेटर
int arr[] = {1, 2, 3}; // इनिशियलाइजर सेपरेटर
struct S { int x, y; }; // मेंबर सेपरेटर
तुलना
| संदर्भ | भूमिका | व्यवहार |
|---|---|---|
x = (a, b) | ऑपरेटर | a इवैल्यूएट, डिस्कार्ड, b इवैल्यूएट, रिटर्न b |
int a, b; | सेपरेटर | दो वेरिएबल्स डिक्लेयर |
func(a, b) | सेपरेटर | दो आर्गुमेंट्स पास |
for (i=0, j=0; ...; i++, j++) | मिश्रित | इनिट/इन्क्रीमेंट में ऑपरेटर, कंडीशन में सेपरेटर नहीं |