Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

405
Vistas
Asignar varios enteros separados por comas a un int en C: ¿por qué funciona? ¿Para qué?

Vi esto en un examen y cuando lo probé me sorprendí. Lo probé en línea y también funciona. Así que creo que es el lenguaje C.

¿Por qué está funcionando? ¿Cuál es el caso de uso para tal sintaxis de asignación?

 #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int i = (1,2,3,4,5); printf("%d", i); return 0; }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Estos no son "enteros múltiples", sino un operador de coma. Toda la parte entre paréntesis es una sola expresión con cada subexpresión (separada por comas) evaluada estrictamente de izquierda a derecha. Se ignoran los resultados de todas las subexpresiones excepto la más a la derecha. El resultado de la expresión completa es el de la última expresión (más a la derecha). Aquí está el valor entero 5 .

Tenga en cuenta que este operador se usa principalmente donde solo se permite una sola expresión para agregar más efectos secundarios. Por ejemplo, en un bucle como:

 int cnt = 0; for ( const char *cp = "Hello" ; *cp != '\0' ; cp++, cnt++ ) ;

Esto cuenta el número de caracteres en una cadena C, incrementando el puntero y el cnt después de cada iteración. Los resultados se ignoran aquí.

Entonces, esto no está relacionado de ninguna manera con tuplas o similares como en Python. En realidad, no hay casos en los que el uso de este operador sea inevitable y debe usarse con precaución, y algunos estándares de codificación prohíben su uso.

over 4 years ago · Santiago Trujillo Denunciar

0

Ese es el operador de coma en el trabajo. Evalúa la expresión en su lado izquierdo, crea un punto de secuencia, descarta el valor de la expresión, luego evalúa la expresión en el lado derecho y lo devuelve como el valor. Cuando hay varias expresiones como en el ejemplo, cada una se evalúa por turno y solo se conserva la última. Con la muestra, el compilador hace la evaluación porque cada valor se conoce en el momento de la compilación. Tenga en cuenta que la lista de argumentos de una función no es un uso del operador de coma.

Ese no es un caso de uso válido para el operador de coma. Lo que podría ser un caso de uso más válido sería algunas operaciones con efectos secundarios (como llamadas a funciones) que deben secuenciarse y asignarse el valor final:

 int i = (getchar(), getchar(), getchar());

Esto establece i en el tercer carácter en la entrada estándar, o EOF si no quedan tres caracteres en la entrada estándar para leer. Todavía no es un caso de uso realista, pero es mejor que asignar una lista de constantes.

over 4 years ago · Santiago Trujillo Denunciar

0

Además de las otras respuestas, debe observar las instancias en las que , es el operador de coma en lugar de cuando es un separador. Por ejemplo, lo siguiente no es válido:

 int i = 1,2,3,4,5;

En este caso, el , es un separador entre declaraciones de variables. Declara i como un int y lo inicializa a 1, luego intenta analizar 2 como un nombre de variable, lo que falla.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda