Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda de sintaxis en C

Iniciado por fiero, 06 de Abril de 2003, 04:33:06 PM

« anterior - próximo »

fiero

                                Bueno, después de más de una década programando en C no me hubiera imaginado hacer esta pregunta tan simple, pero es que estoy flipando...

Trabajo con Visual C++ 6.0 y debido a un error tipográfico me he dado cuenta de que se pueden escribir números separados por comas al final de cualquier sentencia que acabe en punto y coma. Si el compilador no lo percibe como un error de sintaxis imagino que será porque vale para algo. ¿Se puede saber para qué leches vale?  :o

ejemplos prácticos:



int funcionchorra()

{

   return(0);

}



void otrafuncionchorra()

{

   int n;



   n=5,34,6,7,23;    //Despues de esto n=5

   n=funcionchorra(),9,67,12,4;    //Despues de esto n=0

}



un saludo

PD: Acabo de comprobar que el compilador no genera nada, es como si esos números no existieran, entonces ¿Es un error del compilador, que debería señalar un error de sintaxis?                                
www.videopanoramas.com Videopanoramas 3D player

Grugnorr

                                El fabuloso operador coma , que puedes sobrecargar en C++ si recordara como se llama en inglés  :jaja: .

Que yo sepa te hace las 2 operaciones secuencialmente por defecto, cosa que concuerda con lo que dices.

Citar
n=funcionchorra(),9,67,12,4;    //Despues de esto n=0

Eso te lo pasa a
Citar
n=funcionchorra();
9;
67;
12;
4;

Las constantes que no se usan para nada las quta el compilador :)

PD: Cuando quieras rallarte de verdad, busca en google el operator whitespace..... el espacio en blanco usado como operador :)                                
hat the hells!

fiero

                                Vaya, así que es eso. Pues me imagino que esto puede llevar a errores a la gente que empiece con C++, porque al no estar familiarizados con la sintaxis es facil que les pase como a mi. Lo que me ha pasado es que tenia una función con parámetros que tienen valores por defecto:

void funcion(int parametro1, int parametro2=0, int parametro3=0);

y la llamaba de la siguiente forma:

funcion(10);

pero luego he querido llamarla con otros valores en los parámetros y al insertar los valores, he pinchado después del parentesis en vez de antes, resultandome el código:

funcion(10),20,30;

claro, compila bien, y al ejecutar veo que no ha cambiado nada...

Gracias por la aclaración, que jodido ese operador ','  :jaja:

un saludo                                
www.videopanoramas.com Videopanoramas 3D player

Grugnorr

                                C nunca ha tenido en cuenta ni la claridad del código ni a los principiantes o erratas :(                                
hat the hells!

seryu

                                pa eso ta el ansi c                                

Tei

                                la coma es mas o menos un separador mas, lo que pasa que no inicia nueva sentancia.

if (!estacansada)
  follar(),cigarrico(),follar();

esto es follar dos veces si no esta cansada, con un descanso para echarse un cigarrico

mientras que:

if (!estacansada)
 follar;cigarrico();follar();

esto es echar un polvo si le no esta cansada, y luego fumarse un cigarrico y echarle otro. Y en el caso de que este cansada, nos fumanos un cigarrico y a continuacion le echamos el polvico.

Al operador coma no me lo trateis tan mal.

Nota:
el codigo ese no lo he compilado ni corrido, jejejeje..                                

MChiz

                                Para hacer cosas de ese estilo ya existen las llaves... y las muñecas hinchables :b                                

Tei

                               
CitarPara hacer cosas de ese estilo ya existen las llaves... y las muñecas hinchables :b

jamas he necesitado de la coma para hacer nada hackeriano, para empezar que esa clase de trucos hacen el codigo menos legible, pero se me puede ocurrir por lo menos un uso valido...

return total = suma(a,B), total == 10;

en principio, y con la logica de antes (si no me equivoco) esto devolveria cierto si a+b suman diez, y falso en otro caso. Otra forma de escribir lo mismo:

return (total = suma(a,B)) == 10;

esto es algo un poco mas criptico, o quizas no viendo lo poco conocida que es la coma                                

fiero

                                No sé, no le acabo de ver la utilidad.
En el ejemplo anterior, si se supone que un return es un final de función, no sirve de nada almacenar el resultado que solo vas a comparar. Lo más facil sería hacer esto:

return suma(a,B) == 10;

De todas formas en el caso de almacenar el resultado yo lo haria en dos frasecillas:

total = suma(a,B);
return total == 10;

Y como separador, son mucho más claras las llaves...

un saludo                                
www.videopanoramas.com Videopanoramas 3D player

Tei

                                Es un ejemplo del uso de la coma, no un ejemplo de codigo optimo o especialmente util. Pues mire usted señor Aznar, "total" es una variable global. Asi que si lo dejas en:

return suma(a,B)==10;

Queda como mal un ejemplo de la coma en el que no sale la coma (esta de separar expresiones) y que ademas tiene un bug gordo (total debe ajustarse al valor de retorno de suma).                                

fiero

                                cierto señor Gonzalez.... XDD

un saludo                                
www.videopanoramas.com Videopanoramas 3D player

Tei

                               
Citarcierto señor Gonzalez.... XDD

un saludo

te has dado cuenta que ese era tu mensaje 333?, aun te faltan otros tantos para hacer un mensaje realmente diabolico :D                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.