Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: fiero en 06 de Abril de 2003, 04:33:06 PM

Título: Duda de sintaxis en C
Publicado por: fiero en 06 de Abril de 2003, 04:33:06 PM
                                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?                                
Título: ....
Publicado por: Grugnorr en 06 de Abril de 2003, 05:29:48 PM
                                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 :)                                
Título: Duda de sintaxis en C
Publicado por: fiero en 06 de Abril de 2003, 06:35:40 PM
                                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                                
Título: ....
Publicado por: Grugnorr en 07 de Abril de 2003, 12:44:58 AM
                                C nunca ha tenido en cuenta ni la claridad del código ni a los principiantes o erratas :(                                
Título: Duda de sintaxis en C
Publicado por: seryu en 08 de Abril de 2003, 11:24:17 PM
                                pa eso ta el ansi c                                
Título: Re: Duda de sintaxis en C
Publicado por: Tei en 02 de Mayo de 2003, 01:49:41 AM
                                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..                                
Título: Duda de sintaxis en C
Publicado por: MChiz en 02 de Mayo de 2003, 10:07:00 AM
                                Para hacer cosas de ese estilo ya existen las llaves... y las muñecas hinchables :b                                
Título: Duda de sintaxis en C
Publicado por: Tei en 02 de Mayo de 2003, 12:40:53 PM
                               
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                                
Título: Duda de sintaxis en C
Publicado por: fiero en 02 de Mayo de 2003, 03:18:55 PM
                                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                                
Título: Duda de sintaxis en C
Publicado por: Tei en 02 de Mayo de 2003, 03:55:16 PM
                                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).                                
Título: Duda de sintaxis en C
Publicado por: fiero en 02 de Mayo de 2003, 06:15:25 PM
                                cierto señor Gonzalez.... XDD

un saludo                                
Título: Duda de sintaxis en C
Publicado por: Tei en 02 de Mayo de 2003, 09:08:25 PM
                               
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