در زبان برنامه نویسی سی و سی++، عملگر کاما که توسط علامت , نشان داده می شود، یک عملگر دودویی است که اولین عملوندش را ارزیابی می کند، اما نتیجه آن را باطل کرده و سپس دومین عملوندش را ارزیابی می کند و سپس مقدار ( و نوع ) عملگر دومش را برمی گرداند.
استفاده از نشانه کاما به عنوان یک عملگر، متمایز از به کار بردن آن در فراخوانی و تعریف توابع، اعلان متغیرها، اعلان نوع شمارشی، و ساختارهای مشابه است. در این گونه موارد، کاما به عنوان یک جداساز عمل می کند و نه به عنوان یک عملگر.
عملگر کاما عبارات ( که دارای مقدار هستند ) را از هم جدا می کند. این کار مشابه عملگر سمی کالن است که دستورها را خاتمه می دهد. دنباله ای از عبارات که در داخل پرانتز قرار گرفته اند، مشابه دنباله ای دستورها است که در داخل آکولاد قرار دارند. برای مثال، ( a, b, c ) دنباله ای از عبارات است که توسط کاما جدا شده اند و در آن تنها آخرین عبارت که c است ارزیابی می شود، در حالی که {a; b; c; } دنباله ای از دستورها است که توسط سمی کالن جدا شده اند و به هیچ مقداری ارزیابی نمی شود. توجه کنید که کاما می تواند در بین دو عبارت قرار گیرد. کاما عبارات را از یکدیگر جدا می کند. این برخلاف عملکرد سمی کالن است که در پایان دستورها قرار می گیرد و به دستورها خاتمه می دهد.
در بین عملگرهای سی، عملگر کاما پایین ترین اولویت را دارد و به عنوان یک نقطه توالی عمل می کند. اگر کاماها و سمی کالن ها با هم ترکیب شوند، سمی کالن ها اولویت پایین ترین نسبت به کاماها خواهند داشت. چرا که سمی کالن ها دستورها را از هم جدا می کنند، اما کاماها خود بخشی از دستور هستند و در داخل آن قرار دارند. عبارت a, b; c, d به صورت ( a, b ) ; ( c, d ) گروه بندی می شود، چرا که آنها دو دستور مجزا هستند.
در مثال های زیر، تفاوت رفتار بین خطوط دوم و سوم به این خاطر است که عملگر کاما اولویت کمتری نسبت به عملگر انتساب ( = ) دارد.
// Examples: Descriptions: Values after line is evaluated: int a=1, b=2, c=3, i=0; // comma acts as separator in this line, not as an operator . . . a=1, b=2, c=3, i=0 i = ( a, b ) ; // stores b into i . . . a=1, b=2, c=3, i=2 i = a, b; // stores a into i. Equivalent to ( i = a ) , b; . . . a=1, b=2, c=3, i=1 i = ( a += 2, a + b ) ; // increases a by 2, then stores a+b = 3+2 into i . . . a=3, b=2, c=3, i=5 i = a += 2, a + b; // increases a by 2, then stores a into i. Equivalent to ( i = ( a += 2 ) ) , a + b; . . . a=5, b=2, c=3, i=5 i = a, b, c; // stores a into i . . . a=5, b=2, c=3, i=5 i = ( a, b, c ) ; // stores c into i . . . a=5, b=2, c=3, i=3 در خط اول، کاما به عنوان یک جدا ساز عمل می کند و نه به عنوان یک عملگر. در خط دوم، عملگر کاما مقدار a را باطل کرده و b را برمی گرداند و سپس b به متغیر i منتسب می شود.
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفاستفاده از نشانه کاما به عنوان یک عملگر، متمایز از به کار بردن آن در فراخوانی و تعریف توابع، اعلان متغیرها، اعلان نوع شمارشی، و ساختارهای مشابه است. در این گونه موارد، کاما به عنوان یک جداساز عمل می کند و نه به عنوان یک عملگر.
عملگر کاما عبارات ( که دارای مقدار هستند ) را از هم جدا می کند. این کار مشابه عملگر سمی کالن است که دستورها را خاتمه می دهد. دنباله ای از عبارات که در داخل پرانتز قرار گرفته اند، مشابه دنباله ای دستورها است که در داخل آکولاد قرار دارند. برای مثال، ( a, b, c ) دنباله ای از عبارات است که توسط کاما جدا شده اند و در آن تنها آخرین عبارت که c است ارزیابی می شود، در حالی که {a; b; c; } دنباله ای از دستورها است که توسط سمی کالن جدا شده اند و به هیچ مقداری ارزیابی نمی شود. توجه کنید که کاما می تواند در بین دو عبارت قرار گیرد. کاما عبارات را از یکدیگر جدا می کند. این برخلاف عملکرد سمی کالن است که در پایان دستورها قرار می گیرد و به دستورها خاتمه می دهد.
در بین عملگرهای سی، عملگر کاما پایین ترین اولویت را دارد و به عنوان یک نقطه توالی عمل می کند. اگر کاماها و سمی کالن ها با هم ترکیب شوند، سمی کالن ها اولویت پایین ترین نسبت به کاماها خواهند داشت. چرا که سمی کالن ها دستورها را از هم جدا می کنند، اما کاماها خود بخشی از دستور هستند و در داخل آن قرار دارند. عبارت a, b; c, d به صورت ( a, b ) ; ( c, d ) گروه بندی می شود، چرا که آنها دو دستور مجزا هستند.
در مثال های زیر، تفاوت رفتار بین خطوط دوم و سوم به این خاطر است که عملگر کاما اولویت کمتری نسبت به عملگر انتساب ( = ) دارد.
// Examples: Descriptions: Values after line is evaluated: int a=1, b=2, c=3, i=0; // comma acts as separator in this line, not as an operator . . . a=1, b=2, c=3, i=0 i = ( a, b ) ; // stores b into i . . . a=1, b=2, c=3, i=2 i = a, b; // stores a into i. Equivalent to ( i = a ) , b; . . . a=1, b=2, c=3, i=1 i = ( a += 2, a + b ) ; // increases a by 2, then stores a+b = 3+2 into i . . . a=3, b=2, c=3, i=5 i = a += 2, a + b; // increases a by 2, then stores a into i. Equivalent to ( i = ( a += 2 ) ) , a + b; . . . a=5, b=2, c=3, i=5 i = a, b, c; // stores a into i . . . a=5, b=2, c=3, i=5 i = ( a, b, c ) ; // stores c into i . . . a=5, b=2, c=3, i=3 در خط اول، کاما به عنوان یک جدا ساز عمل می کند و نه به عنوان یک عملگر. در خط دوم، عملگر کاما مقدار a را باطل کرده و b را برمی گرداند و سپس b به متغیر i منتسب می شود.

wiki: عملگر کاما