Skip to content
Related Articles

Related Articles

Save Article
Improve Article
Save Article
Like Article

Comma in C and C++

  • Difficulty Level : Easy
  • Last Updated : 24 Sep, 2021

In C and C++, comma (, ) can be used in two contexts: 
1) Comma as an operator: 
The comma operator (represented by the token, ) is a binary operator that evaluates its first operand and discards the result, it then evaluates the second operand and returns this value (and type). The comma operator has the lowest precedence of any C operator, and acts as a sequence point
 

Take a step-up from those "Hello World" programs. Learn to implement data structures like Heap, Stacks, Linked List and many more! Check out our Data Structures in C course to start learning today.

C




/* comma as an operator */
int i = (5, 10); /* 10 is assigned to i*/
int j = (f1(), f2()); /* f1() is called (evaluated) first followed by f2().
                      The returned value of f2() is assigned to j */

2) Comma as a separator: 
Comma acts as a separator when used with function calls and definitions, function like macros, variable declarations, enum declarations, and similar constructs. 
 

C




/* comma as a separator */
int a = 1, b = 2;
void fun(x, y);

The use of comma as a separator should not be confused with the use as an operator. For example, in below statement, f1() and f2() can be called in any order. 
 

C




/* Comma acts as a separator here and doesn't enforce any sequence.
    Therefore, either f1() or f2() can be called first */
void fun(f1(), f2());

See this for C vs C++ differences of using comma operator.
You can try below programs to check your understanding of comma in C. 
 



C




// PROGRAM 1
#include <stdio.h>
int main()
{
    int x = 10;
    int y = 15;
 
    printf("%d", (x, y));
    getchar();
    return 0;
}

C




// PROGRAM 2:  Thanks to Shekhu for suggesting this program
#include <stdio.h>
int main()
{
    int x = 10;
    int y = (x++, ++x);
    printf("%d", y);
    getchar();
    return 0;
}

C




// PROGRAM 3:  Thanks to Venki for suggesting this program
#include <stdio.h>
int main()
{
    int x = 10, y;
 
    // The following is equivalent
    // to y = x + 2 and x += 3,
    // with two printings
    y = (x++,
         printf("x = %d\n", x),
         ++x,
         printf("x = %d\n", x),
         x++);
 
    // Note that last expression is evaluated
    // but side effect is not updated to y
    printf("y = %d\n", y);
    printf("x = %d\n", x);
 
    return 0;
}

The following expression in the code:

a = 2, 3, 4;

is evaluated as:

(((a = 2), 3), 4);

This is because the reason that assignment operator has high precedence over the comma operator.

C++




#include <iostream>
 
using namespace std;
 
int main()
 
{
 
    int a = 5;
 
    a = 2, 3, 4;
 
    cout << a;
 
    return 0;
}

3) Comma operator in place of a semicolon. 
We know that in C and C++, every statement is terminated with a semicolon but comma operator also used to terminate the statement after satisfying the following rules. 
 

  • The variable declaration statements must be terminated with semicolon.
  • The statements after declaration statement can be terminated by comma operator.
  • The last statement of the program must be terminated by semicolon.

Examples: 
 

CPP




#include <iostream>
using namespace std;
int main()
{
    cout << "First Line\n",
        cout << "Second Line\n",
        cout << "Third Line\n",
        cout << "Last line";
    return 0;
}

Output: 
 



First Line
Second Line
Third Line
Last line

Try not to confuse between comma as a separator and comma as an operator. Sample example:

int a = 4, 3;

This will generate an error as comma in this case acts as a separator as declaration takes place. So the error less code will be as follows:

int a;

a = 4,3;

Now the value stored in a will be 4.

Also, the following is valid,

int a =(4, 3);

here , 3 is stored in a.

References: 
http://en.wikipedia.org/wiki/Comma_operator 
http://publib.boulder.ibm.com/infocenter/comphelp/v101v121/index.jsp?topic=/com.ibm.xlcpp101.aix.doc/language_ref/co.html 
http://msdn.microsoft.com/en-us/library/zs06xbxh.aspx
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 




My Personal Notes arrow_drop_up
Recommended Articles
Page :