Coma en C y C++

En C y C++, la coma (, ) se puede usar en dos contextos: 
1) Coma como operador: 
el operador de coma (representado por el token, ) es un operador binario que evalúa su primer operando y descarta el resultado, luego evalúa el segundo operando y devuelve este valor (y tipo). El operador de coma tiene la precedencia más baja de cualquier operador de C y actúa como un punto de secuencia
 

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) Coma como separador: 
la coma actúa como separador cuando se usa con llamadas y definiciones de funciones, funciones como macros, declaraciones de variables, declaraciones de enumeración y construcciones similares. 
 

C

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

El uso de la coma como separador no debe confundirse con el uso como operador. Por ejemplo, en la siguiente declaración, f1() y f2() pueden llamarse en cualquier orden. 
 

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());

Vea esto para ver las diferencias entre C y C++ al usar el operador de coma.
Puede probar los siguientes programas para verificar su comprensión de la coma en 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;
}

La siguiente expresión en el código:

a = 2, 3, 4;

se evalúa como:

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

Esto se debe a que el operador de asignación tiene una gran prioridad sobre el operador de coma.

C++

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

3) Operador coma en lugar de punto y coma. 
Sabemos que en C y C++, cada declaración termina con un punto y coma, pero el operador de coma también se usa para terminar la declaración después de cumplir con las siguientes reglas. 
 

  • Las sentencias de declaración de variables deben terminar con punto y coma.
  • Las declaraciones después de la declaración de declaración pueden terminarse con un operador de coma.
  • La última declaración del programa debe terminar con punto y coma.

Ejemplos: 
 

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;
}

C

// C Program to illustrate the use of comma operator
// in the place of semicolon
 
#include <stdio.h>
 
int main(void)
{
    printf("First Line\n"),
        printf("Second Line\n"),
        printf("Third Line\n"),
        printf("Last line");
    return (0);
}
 
// This code is contributed by sarajadhav12052009

Producción: 
 

First Line
Second Line
Third Line
Last line

Trate de no confundir entre coma como separador y coma como operador. Ejemplo de muestra:

int a = 4, 3;

Esto generará un error ya que la coma en este caso actúa como un separador cuando se realiza la declaración. Así que el código de error menos será el siguiente:

en un;

a = 4,3;

Ahora el valor almacenado en a será 4.

Además, lo siguiente es válido,

int a =(4, 3);

aquí, 3 se almacena en a.

Referencias: 
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
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *