es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se llama este tipo de uso, “corchetes dentro de paréntesis”, en C?

“`c++
mientras (({bool a; a =a&&false; a;})) {
;
}

funcionará bien.

pero

mientras ({bool a; a =a&&false; a;}) {
;
}

terminará con

filename.cc: En la función ‘int main()’:
filename.cc:103:10: error: la expresión esperada antes del token ‘{’
mientras ({bool a; a =a&&false; a;}) {
^
filename.cc:103:10: error: esperado ‘)’ antes del token ‘{’
mientras ({bool a; a =a&&false; a;}) {
~^
)
filename.cc:103:35: error: la expresión esperada antes del token ‘)’
mientras ({bool a; a =a&&false; a;}) {

¿A qué palabra clave debería referirme si quiero aprender más sobre esto?

He buscado palabras clave como “corchetes dentro de paréntesis en C” pero en vano.

otros intentos:

mientras (({ ; })) {
;
}

filename.cc:105:16: error: no se pudo convertir ‘({…})’ de ‘void’ a ‘bool’
mientras (({ ; })) {

Parece que ‘({…})’ es un tipo, algo similar a int, float. ¿Tengo razón o es algo como una función lambda en c++?

Gracias a @user2864740, @o11c, @paddy, mi problema está resuelto. Es algún tipo de “expresión de declaración” solo disponible en gcc.
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Si quieres aprender más sobre el uso de llaves dentro de paréntesis en C, deberías buscar “expresiones de sentencias” o “expresiones compuestas”. Estas son una extensión del estándar C proporcionada por el compilador GCC, que te permite agrupar un conjunto de sentencias en una sola expresión.

    En tu primer ejemplo, las expresiones encerradas entre llaves crean una expresión de sentencia que se evalúa como false. Esta expresión se utiliza como condición para el bucle while.

    En el segundo ejemplo, las expresiones encerradas entre llaves no se están utilizando como una expresión válida, lo que causa un error de sintaxis.

    Por último, en tu tercer ejemplo, las expresiones encerradas entre llaves se están evaluando como una expresión de sentencia, pero como no hay ninguna sentencia que evaluar, esto causa un error diferente.

    En general, si quieres utilizar expresiones de sentencias en tu código, debes tener en cuenta que no forman parte del estándar C y es posible que no sean compatibles con todos los compiladores.

Comments are closed.