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

232
Vistas
while loop con definición de variable en C

Actualmente estoy tratando de recorrer una colección recuperada por una API en C.

La API ofrece una función getNext() que devuelve una referencia al siguiente elemento de la colección, o NULL si se ha llegado al final.

Ahora quería declarar una variable en una expresión while y hacer un bucle hasta NULL:

 // create collection from API Collection collection = create(); if (collection == NULL) { return -1 } while (const Element *e = getNext(collection) != NULL) { // print data from e }

Al compilar, aparece 'error: expresión inesperada'. ¿Por qué esa declaración no funciona en C? ¿Cómo puedo recorrer la colección cuando todo lo que tengo es una función getNext() que devuelve un elemento o NULL?

También probé lo siguiente, pero ocurrió el mismo error:

 while ((const Element *e = getNext(collection)) != NULL) { // print data from e }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

No es posible porque while() espera una expresión y no es posible colocar una declaración en la expresión (¡aunque es posible introducir un nuevo tipo con expresión!).

Lo mejor que puedes conseguir es:

 const Element *e; while ((e = getNext(collection)) != NULL) { // print data from e }

Sin embargo, es posible lograr la funcionalidad deseada con un bucle for .

 for (const Element *e; (e = getNext(collection)) != NULL; ) { // print data from e }
over 4 years ago · Santiago Trujillo Denunciar

0

En primer lugar, a diferencia de una declaración for , no puede declarar una nueva variable en una declaración while . Por lo tanto, la siguiente línea es incorrecta:

 while (const Element *e = getNext(collection) != NULL) {

Podrías arreglar esto escribiendo lo siguiente:

 const Element *e; while ( e = getNext(collection) != NULL ) {

Una forma más compacta de escribir esto es la siguiente:

 for ( const Element *e; e = getNext(collection) != NULL ; ) {

La segunda versión tiene la ventaja de que el alcance de la variable e está limitado al bucle for .

Sin embargo, las líneas mencionadas anteriormente también son incorrectas, por la siguiente razón:

El operador != tiene mayor precedencia que = . Entonces la línea

 while ( e = getNext(collection) != NULL) {

es equivalente a:

 while ( e = ( getNext(collection) != NULL ) ) {

Esto no es lo que quieres. Deberías escribir lo siguiente en su lugar:

 while ( ( e = getNext(collection) ) != NULL ) {
over 4 years ago · Santiago Trujillo Denunciar

0

En C, no puede declarar una variable en la expresión de condición de un ciclo while.

GCC le dirá:

 Error: Expected expression before 'const'
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