C/C++-এ কমা অপারেটরের দুটি প্রসঙ্গ রয়েছে:
- সেপারেটর (Separator) হিসেবে: ভেরিয়েবল ডিক্লেয়ারেশনে বা ফাংশন আর্গুমেন্টে 알াদা করতে।
- অপারেটর (Operator) হিসেবে: বাইনারি অপারেটর { , } — এটি প্রথম এক্সপ্রেশনকে ইভ্যালুয়েট করার পর ফেলে দেয় এবং দ্বিতীয় এক্সপ্রেশনের মান ব্যবহার করে। এই অপারেটরটির প্রসিডেন্স সবচেয়ে কম।
নিচের কোডগুলো দেখে আউটপুট অনুমান করুন:
উদাহরণ ১
#include <stdio.h>
int main(void) {
char ch = 'a', 'b', 'c';
printf("%c", ch);
return 0;
}
আউটপুট
এখানে এরর আসবে কারণ কমা এখানে সেপারেটর হিসেবে কাজ করছে।
prog.c: In function ‘main’:
prog.c:5:20: error: expected identifier or ‘(’ before ‘b’
char ch = 'a', 'b', 'c';
^~~
উদাহরণ ২
#include <stdio.h>
int main(void) {
char ch;
ch = 'a','b','c';
printf("%c", ch);
return 0;
}
আউটপুট
a আউটপুট হবে। কারণ এখানে কমা অপারেটর হিসেবে কাজ করছে, কিন্তু এর প্রসিডেন্স অ্যাসাইনমেন্ট অপারেটরের নিচে, তাই 'a' অ্যাসাইন হয়ে যায়।
a
উদাহরণ ৩
#include <stdio.h>
int f1() { return 43; }
int f2() { return 123; }
int main(void) {
int a;
a = (f1() , f2());
printf("%d", a);
return 0;
}
আউটপুট
123 আউটপুট হবে। কারণ কমা অপারেটর ব্র্যাকেটের ভেতরে থাকায় সেকেন্ড এক্সপ্রেশন ইভ্যালুয়েট হয়ে তার মান দেয়।
123