Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

410
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!