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