while tipos switch sentencia resueltos que programacion lenguaje estructuras else ejemplos decisiones anidadas c++ syntax language-extension gcc-extensions

c++ - switch - tipos de decisiones en programacion



¿Qué es esta sintaxis de C++ que pone un bloque rodeado de refuerzos donde se espera una expresión? (4)

Asigna el valor de entrada del usuario ay lo imprime. se hace usando una Statement Expression .

Las expresiones de declaración son gnu. La extensión del compilador gcc no es compatible con los estándares de C / C ++. Por lo tanto, cualquier código que use expresión de declaración no es conforme con las normas y no es portátil.

El IBM IBM XL C / C ++ v7.0 también es compatible con Statement Expressions y su documentación lo explica de manera acertada:

Expresiones de declaración:

Un enunciado compuesto es una secuencia de enunciados encerrados entre llaves. En GNU C, una instrucción compuesta dentro de paréntesis puede aparecer como una expresión en lo que se llama una Statement expression .

.--------------. V | >>-(--{----statement--;-+--}--)--------------------------------><

El valor de una expresión de declaración es el valor de la última expresión simple que aparece en la construcción completa. Si el último enunciado no es una expresión, entonces el constructo es de tipo vacío y no tiene valor.

Siempre compile su código seleccionando un sandard en GCC, use una de las opciones -ansi , -std=c90 o -std=iso9899:1990 , -std=c++03 , -std=c++0x ; para obtener todos los diagnósticos requeridos por el estándar, también debe especificar -pedantic (o -pedantic-errors si desea que sean errores en lugar de advertencias.

Me encontré con este extraño programa de C ++.

#include <iostream> using namespace std; int main() { int a = ({int x; cin >> x; x;}); cout << a; }

¿Puede alguien explicar qué está pasando? ¿Cómo se llama este constructo?


Crea un ámbito en línea, declara x dentro de él, lo lee de la entrada estándar y la sentencia completa finalmente evalúa a x , que se asigna a a .

El operador de coma funciona de manera similar, aunque no requiere un alcance separado. Por ejemplo:

int x; int a = (cin >> x, x);

haría lo mismo Todas las instrucciones conectadas con comas se ejecutarán secuencialmente, y el resultado de toda la expresión se establecerá en el valor del operando del extremo derecho.


Es una extensión de GCC. Compila tu código con la bandera -pedantic si quieres deshacerte de cosas como esta (y realmente quieres).


No creo que esto sea C ++ estándar. Probablemente sea una extensión específica del compilador que permite que un alcance interno evalúe un valor.